2011
Dec
31

這篇文章要實現,使用 Javascript 連接 mysql的功能,mysql 是一般常用的資料庫之一,目前大大小小的web 系統也都是用 mysql在管理,現在就寫個 Javascript connect to mysql。

C 語法 connect mysql

在寫javascript 連接 mysql 資料庫之前,我們得先學會使用 c 語言來連接mysql,並下 SQL 語法,這方面我也不過是第二次寫,也算是個新手 XD ,只能說大家加油!!!

首先你得先安裝 mysql 會用到的 library 與 header,將 libmysqlclient.so 復製到 /usr/local/lib , mysql.h 復製到 /usr/local/include/mysql ,當然除了這兩個檔案,其他相關的 mysql 檔案也一併復製過去,會省掉一些麻煩 。

  • 連線 mysql 第一步, mysql_real_connect(MYSQL結構, host , usr , pswd , port , unix_socket , ? );
  • mysql_query : 執行 SQL 語法
  • mysql_store_result : 取得 SQL 語法執行後結果
  • mysql_fetch_row : 從結果中,取得欄位資料

看起來跟 PHP 很像吧,PHP 熟一點的話,應該很快就上手了,先試一段簡單的用 C 語言抓 db的資料。

  1. #file : db_connect.cc
  2. #include <iostream>
  3. #include <mysql.h>
  4.  
  5. using namespace std;
  6.  
  7. MYSQL *db_conn,mysql;
  8. bool mysql_connect(string sql){
  9.  
  10. try {
  11. db_conn = mysql_real_connect(&mysql,"localhost","root","","test",3306,0,0);
  12. if(db_conn == NULL){
  13. cerr << "mysql connection is fail" << endl;
  14. return false;
  15. }
  16.  
  17. MYSQL_RES *res;
  18. MYSQL_ROW row;
  19. int query_state = mysql_query(db_conn,sql.c_str());
  20. if (query_state !=0) {
  21. cerr << "error" << endl;
  22. return false;
  23. }
  24. res = mysql_store_result(db_conn);
  25. while( (row = mysql_fetch_row(res))!=NULL ){
  26. cout << row[0] << endl;
  27. }
  28. }
  29. catch (int e) {
  30. cerr << e << endl;
  31. }
  32.  
  33. }
  34.  
  35. int main(){
  36. mysql_connect("select * from users;");
  37. }
  38.  

編譯 g++ db_connect.cc -lmysqlclient -I/usr/local/include/mysql -DPHP_ATOM_INC -I//include -I//main -I/ -DHAVE_CONFIG_H -o ./db_connect

v8 語法 connect mysql

寫完 c code connect mysql,接著我們把他改寫成 Google V8 Engine 的語法,這樣就幾乎完成囉,再往下看吧。

  1. Handle<Value> v8_db_connect(const Arguments& args){
  2. String::Utf8Value Sql(args[0]);
  3. mysql_connect(*Sql);
  4. return Boolean::New(true);
  5. }

很簡單吧,加一小段 Google V8 的code 就完成了 v8 connect to mysql,接下來就寫一下 main function + javascript file 來測試囉。

  1. //main
  2. int main(){
  3. HandleScope scope;
  4. Handle<Context> context;
  5. Handle<ObjectTemplate> global = ObjectTemplate::New();
  6. global->Set("mysql_query",FunctionTemplate::New(v8_db_connect));
  7. context = Context::New(NULL,global);
  8. Context::Scope context_scope(context);
  9. Handle<String> source = ReadFile("mysql.js");
  10. Handle<Script> script = Script::Compile(source);
  11. script->Run();
  12. script = Script::Compile(String::New("result"));
  13. Handle<Value> result = script->Run();
  14. String::Utf8Value str(result);
  15. cout << *str ;
  16. return 0;
  17. }
  • javascript file
  1. mysql_query("select id from users;");
  2. var result ="complete";

程式範例 in GitHub



回應 (Leave a comment)