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)