1、手写安装带mysql sdk 的mysql2、新建控制台项目,项目属性中把c:/program files/mysql/mysql server 5.5/include 加入“包含目录”把c:/program files/mysql/mysql server 5.5/lib 加入“库目录”3、stdafx.h中加入#include //注意顺序,要放在mysql.h前#include //控制台项目中要在mysql.h之前include //注意lib添加到“库目录”中,而不是“引用目录”中#pragma comment(lib, libmysql.lib)4、把libmysql.dll放到生成的exe目录下5、主要的几个例子://执行基本查询void test1(){ mysql *pconn; pconn = mysql_init(null); //第2、3、4、5参数的意思分别是:服务器地址、用户名、密码、数据库名,第6个为mysql端口号(0为默认值3306) if(!mysql_real_connect(pconn,localhost,root,root,test,0,null,0)) { printf(无法连接数据库:%s,mysql_error(pconn)); return; } mysql_query(pconn,set names gbk);//防止乱码。设置和数据库的编码一致就不会乱码 //set names x 相当于 set character_set_client = x;set character_set_results = x;set character_set_connection = x; //写set character set gbk;查询不会乱码,但是参数化插入会报错。而set names gbk则都不会乱码 //mysql_real_query比mysql_query多了个参数: 字符串query的长度, 所以适合有二进制数据的query, 而mysql_query的字符串query不能包含二进制,因为它以/0为结尾 //mysql_query() 不能传二进制blob字段,因为二进制信息中的/0会被误判为语句结束。 mysql_real_query() 则可以。 if(mysql_query(pconn,select * from persons)) { printf(查询失败:%s,mysql_error(pconn)); return; } //mysql_store_result是把查询结果一次性取到客户端的离线数据集,当结果比较大时耗内存。 //mysql_use_result则是查询结果放在服务器上,客户端通过指针逐行读取,节省客户端内存。但是一个mysql*连接同时只能有一个未关闭的mysql_use_result查询 mysql_res *result = mysql_store_result(pconn); mysql_row row; while(row = mysql_fetch_row(result)) { printf(%s %s/n,row[1],row[2]); } mysql_free_result(result); mysql_close(pconn);}//获得更新行数void test2(){ mysql *pconn; pconn = mysql_init(null); if(!mysql_real_connect(pconn,127.0.0.1,root,root,test,0,null,0)) { printf(无法连接数据库:%s,mysql_error(pconn)); return; } if(mysql_query(pconn,update persons set age=age+1)) { printf(执行失败:%s,mysql_error(pconn)); return; } printf(更新成功,共更新完成%d条,mysql_affected_rows(pconn)); mysql_close(pconn);}//获得自增idvoid test3(){ mysql *pconn; pconn = mysql_init(null); if(!mysql_real_connect(pconn,127.0.0.1,root,root,test,0,null,0)) { printf(无法连接数据库:%s,mysql_error(pconn)); return; } mysql_query(pconn,set names gbk); if(mysql_query(pconn,insert into persons(name,age) values('传智播客',100))) { printf(执行insert失败%s,mysql_error(pconn)); return; } printf(执行insert成功,新id=%d,mysql_insert_id(pconn)); mysql_close(pconn);}//参数化查询void test4(){ mysql* pconn; pconn = mysql_init(null); if(!mysql_real_connect(pconn,127.0.0.1,root,root,test,0,null,0)) { printf(数据库连接失败:%s,mysql_error(pconn)); return; } mysql_query(pconn,set names gbk); mysql_stmt *stmt; mysql_bind bind[2]; memset(bind,0,sizeof(bind));//把is_null、length等字段默认值设置为null等默认值,否则执行会报错 stmt = mysql_stmt_init(pconn); char* insertsql=insert into persons(name,age) values(?,?); if (mysql_stmt_prepare(stmt, insertsql, strlen(insertsql))) { fprintf(stderr, mysql_stmt_prepare(), insert failed,%s/n,mysql_error(pconn)); return; } bind[0].buffer_type= mysql_type_string; bind[0].buffer= 黑马; bind[0].buffer_length= strlen(黑马); //如果设定了buffer_length,则可以不试用length int age=3; bind[1].buffer_type= mysql_type_long; bind[1].buffer= &age; bind[1].buffer_length = sizeof(age); if (mysql_stmt_bind_param(stmt, bind)) { fprintf(stderr, mysql_stmt_bind_param() failed %s/n, mysql_stmt_error(stmt)); return; } if (mysql_stmt_execute(stmt)) { fprintf(stderr, mysql_stmt_execute(), failed %s/n, mysql_stmt_error(stmt)); return; } mysql_stmt_close(stmt); mysql_close(pconn); printf(参数化执行sql结束);}