C++連接mysql的方法(直接調(diào)用C-API)
我裝的是5.1版本,需要的頭文件有
把需要的文件添加進(jìn)去,然后再把 libmysql.lib放到項(xiàng)目目錄里,文件在mysql安裝目錄 lib 下面.
#include "stdafx.h" #include <iostream> #include <winsock2.h> #include "mysql.h" //#pragma comment(lib, "ws2_32.lib") #pragma comment(lib,"libmysql.lib") using namespace std; int main(int argc, char* argv[]) { mysql_library_init(NULL,0,0); MYSQL mysql; mysql_init(&mysql); if(0==mysql_options(&mysql,MYSQL_SET_CHARSET_NAME,"utf8"))//設(shè)置字符集 { cout << "設(shè)置字符集成功\n\n" <<endl; } if(!mysql_real_connect(&mysql,"localhost","root","kwgkwg","test",0,NULL,CLIENT_MULTI_STATEMENTS))//連接數(shù)據(jù)庫(kù) { cout << "not connect mysql" << endl; }else { cout << "welcome to mysql\n\n\n"; } mysql_query(&mysql,"select * from demo1"); //執(zhí)行SQL語(yǔ)句 MYSQL_RES *result=mysql_store_result(&mysql); //獲取資源 int rowcount=mysql_num_rows(result); //獲取記錄數(shù) unsigned int fieldcount=mysql_num_fields(result); //獲取字段數(shù) //cout << rowcount << endl; MYSQL_FIELD *field=NULL; //字段 MYSQL_ROW row=NULL; //記錄 while(row=mysql_fetch_row(result)) { for(unsigned int i=0;i<fieldcount;i++) { field=mysql_fetch_field_direct(result,i); cout<<field->name<<":"<<row[i] <<"\n"; } } mysql_free_result(result); mysql_close(&mysql); mysql_server_end(); mysql_library_end(); return 0; }
C++訪問(wèn) (直接調(diào)用C-API)
#include <iostream> #include <windows.h> #include <mysql.h> #include <string> static const char host[32] = "localhost"; static const char user[32] = "test"; static const char passwd[32] = "passwd"; static const char db[32] = "test"; /** mysql> select * from t; +----+ | id | +----+ | 1 | +----+ 1 row in set (0.00 sec) mysql> delimiter // mysql> create procedure get_t(in t1 int) -> begin -> select id from t where id=t1; -> end -> // Query OK, 0 rows affected (0.05 sec) mysql> call get_t(1); -> // +----+ | id | +----+ | 1 | +----+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) */ void test_more_results(MYSQL* h) { char str[512] = "insert into test_num values(101);insert into test_num values(122);commit;"; int r = mysql_real_query(h, str, strlen(str)); if (r) { const char * error = mysql_error(h); std::cout<<"*** Connection Error " << error << std::endl; } do { MYSQL_RES* res = mysql_store_result(h); mysql_free_result(res); } while ( (0 == mysql_next_result(h)) ); } void test_proc_stmt(MYSQL* h) { MYSQL* mysql_ = h; MYSQL_BIND bind; MYSQL_BIND obind[1]; // test_more_results(mysql_); MYSQL_STMT *hStmt = mysql_stmt_init(mysql_); my_bool true_value= 1; mysql_stmt_attr_set(hStmt, STMT_ATTR_UPDATE_MAX_LENGTH, (void*) &true_value); char sql[] = "call get_t(?)"; //char sql[] = "select id from t where id=?"; if (mysql_stmt_prepare(hStmt, sql, strlen(sql))) { std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl; mysql_stmt_reset(hStmt); if (mysql_stmt_prepare(hStmt, sql, strlen(sql))) { std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl; mysql_close(mysql_); exit( -1); } } int id = 1; unsigned long id_len = 0; memset(&bind, 0, sizeof(bind)); bind.buffer_type = FIELD_TYPE_LONG; bind.buffer = (void*)&id; bind.is_unsigned = true; bind.length = &id_len; // bind[0].buffer_length = sizeof(id); // bind[0].is_null = 0; if (mysql_stmt_bind_param(hStmt,(MYSQL_BIND*)(&bind)) != 0) { std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl; mysql_close(mysql_); exit( -1); } if (mysql_stmt_execute(hStmt) != 0) { std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl; mysql_close(mysql_); exit( -1); } int t2; memset(obind, 0, sizeof(obind)); obind[0].buffer_type= MYSQL_TYPE_LONG; obind[0].buffer= (char *)&t2; obind[0].buffer_length = sizeof(t2); if (mysql_stmt_bind_result(hStmt, (MYSQL_BIND*)&obind[0]) != 0) { std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl; mysql_close(mysql_); exit( -1); } if ( mysql_stmt_store_result(hStmt) != 0 ) { std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl; mysql_close(mysql_); exit( -1); } int rows = mysql_stmt_num_rows(hStmt); for (int i=0; i<rows; i++) { if (mysql_stmt_fetch(hStmt) == 0) { std::cout<<"id = "<<t2<<std::endl; } } mysql_stmt_free_result(hStmt); mysql_stmt_close(hStmt); } // // Just for demo only. // int main() { MYSQL* mysql_ = NULL; MYSQL_RES* result_ = NULL; MYSQL_ROW row_; mysql_ = mysql_init(mysql_); // if (mysql_real_connect(mysql_, host, user, passwd, db, 3306, NULL, CLIENT_MULTI_STATEMENTS) == NULL) if (mysql_real_connect(mysql_, host, user, passwd, db, 3306, NULL, CLIENT_MULTI_STATEMENTS) == NULL) { const char * error = mysql_error(mysql_); std::cout<<"*** Connection Error " << error << std::endl; return -1; } mysql_autocommit(mysql_, false); std::string encodeStr = "set names 'gbk'"; mysql_real_query(mysql_, encodeStr.c_str(), encodeStr.size()); /* const char* tmpTableName = "t"; // assume you are querying the table 't' char str[512]; int cnt = 0; sprintf(str,"select count(*) as cnt from %s", tmpTableName); mysql_real_query(mysql_, str, strlen(str)); result_ = mysql_store_result(mysql_); while (row_ = mysql_fetch_row(result_)) { // get the field value if (row_[0]) { std::cout<<"count = "<<row_[0]<<std::endl; // convert it into int cnt = atoi(row_[0]); std::cout<<"cnt value = "<<row_[0]<<std::endl; } } mysql_free_result(result_); test_more_results(); */ test_proc_stmt(mysql_); do { MYSQL_RES* res = mysql_store_result(mysql_); mysql_free_result(res); } while ( (0 == mysql_next_result(mysql_)) ); test_proc_stmt(mysql_); mysql_close(mysql_); return 0; }
這樣就差不多了,大家可以根據(jù)需要選擇。
上一篇:OPENCV批量讀取圖片實(shí)現(xiàn)方法
欄 目:C語(yǔ)言
本文標(biāo)題:C++連接mysql的方法(直接調(diào)用C-API)
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1452.html
您可能感興趣的文章
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 01-10深入理解C++中常見(jiàn)的關(guān)鍵字含義
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實(shí)現(xiàn)DBSCAN聚類(lèi)算法
- 01-10全排列算法的非遞歸實(shí)現(xiàn)與遞歸實(shí)現(xiàn)的方法(C++)
- 01-10C++大數(shù)模板(推薦)
- 01-10淺談C/C++中的static與extern關(guān)鍵字的使用詳解
- 01-10深入C/C++浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式詳解
- 01-10深入理解C/C++混合編程


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-10delphi制作wav文件的方法
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文