这篇文章要实现,使用 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的资料。
- #file : db_connect.cc
- #include <iostream>
- #include <mysql.h>
- using namespace std;
- MYSQL *db_conn,mysql;
- bool mysql_connect(string sql){
- try {
- db_conn = mysql_real_connect(&mysql,"localhost","root","","test",3306,0,0);
- if(db_conn == NULL){
- cerr << "mysql connection is fail" << endl;
- return false;
- }
- MYSQL_RES *res;
- MYSQL_ROW row;
- int query_state = mysql_query(db_conn,sql.c_str());
- if (query_state !=0) {
- cerr << "error" << endl;
- return false;
- }
- res = mysql_store_result(db_conn);
- while( (row = mysql_fetch_row(res))!=NULL ){
- cout << row[0] << endl;
- }
- }
- catch (int e) {
- cerr << e << endl;
- }
- }
- int main(){
- mysql_connect("select * from users;");
- }
编译 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 的语法,这样就几乎完成罗,再往下看吧。
- Handle<Value> v8_db_connect(const Arguments& args){
- String::Utf8Value Sql(args[0]);
- mysql_connect(*Sql);
- return Boolean::New(true);
- }
很简单吧,加一小段 Google V8 的code 就完成了 v8 connect to mysql,接下来就写一下 main function + javascript file 来测试罗。
- //main
- int main(){
- HandleScope scope;
- Handle<Context> context;
- Handle<ObjectTemplate> global = ObjectTemplate::New();
- global->Set("mysql_query",FunctionTemplate::New(v8_db_connect));
- context = Context::New(NULL,global);
- Context::Scope context_scope(context);
- Handle<String> source = ReadFile("mysql.js");
- Handle<Script> script = Script::Compile(source);
- script->Run();
- script = Script::Compile(String::New("result"));
- Handle<Value> result = script->Run();
- String::Utf8Value str(result);
- cout << *str ;
- return 0;
- }
- javascript file
- mysql_query("select id from users;");
- var result ="complete";