這篇文章要實現,使用 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";
回應 (Leave a comment)