c语言访问mysql 完整例子
来源:互联网 发布:格罗兹尼巷战 知乎 编辑:程序博客网 时间:2024/05/22 08:26
- <span style="font-size:18px;">1、手写安装带mysql sdk 的mysql
- 2、新建控制台项目,项目属性中把
- C:\Program Files\MySQL\MySQL Server 5.5\include 加入“包含目录”
- 把C:\Program Files\MySQL\MySQL Server 5.5\lib 加入“库目录”
- 3、stdafx.h中加入
- #include <winsock.h> //注意顺序,要放在mysql.h前
- #include <mysql.h>//控制台项目中要在mysql.h之前include <winsock.h>
- //注意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);
- }
- //获得自增id
- void 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结束");
- }</span>
0 0
- c语言访问mysql 完整例子
- c语言访问mysql 完整例子
- C语言访问MYSQL数据库的完整的代码例子
- C语言访问MYSQL数据库的完整的代码例子
- c访问mysql的完整例子
- c访问mysql的完整例子
- c访问mysql的完整例子
- c访问mysql的完整例子
- VC++6.0 访问Mysql一完整例子
- C语言访问webservice小例子
- 使用c语言访问mysql
- c语言访问MySQL数据库
- C语言访问MySQL数据库
- C语言操作MYSQL小例子
- C语言操作mysql经典例子
- C语言操作MYSQL小例子
- 使用C语言访问MySQL数据库
- C语言访问MySQL数据库的方法
- 在PHPStorm中调试PHP代码
- Keepalived+nginx实现双主高可用负载均衡
- 三步解决Android Studio启动一直在Fetching的问题
- CSDN-markdown编辑器
- 配置Spring的OpenSessionInViewFilter过滤器,以解决Hibernate的懒加载异常(LazyInitializationException)
- c语言访问mysql 完整例子
- [POJ1117] Picture && 线段树+扫描线
- 前置++及后置++在各种情况下的执行过程~~~~~带图片解释!!!!!!
- POJ 1185 炮兵阵地
- Android SQLite小结
- 双向冒泡
- mysql书籍
- 已阅读C/C++书籍清单
- Spring中applicationContext.xml配置文件中数据库数据源配置