Linux C语言连接MySQL 增删改查操作

http://asyty.iteye.com/blog/1447092

Linux下想要测试mysql和memcached的性能,因为是服务器只能通过终端连接,所以考虑用C语言写测试代码。于是研究了把C怎么连接 MySQL以及增删改查的代码。安装mysql-client或者编译源码安装mysql后,会有支持C语言写客户端的头文件和库文件,但是目录可能不一 样,mysql源码安装见 http://asyty.iteye.com/blog/1442503

从网上找了类似的代码改改后如下

 

连接数据库


点击(此处)折叠或打开

  1. #include <stdlib.h>
  2.     #include <stdio.h>
  3.     #include <mysql.h>
  4.     int main() {
  5.         MYSQL *conn_ptr;
  6.       
  7.         conn_ptr = mysql_init(NULL);
  8.         if (!conn_ptr) {
  9.             printf("mysql_init failed\n");
  10.             return EXIT_FAILURE;
  11.         }
  12.         conn_ptr = mysql_real_connect(conn_ptr, "localhost", "root", "123456", "test", 0, NULL, 0);
  13.         //root 为用户名 123456为密码 test为要连接的database
  14.       
  15.         if (conn_ptr) {
  16.             printf("Connection success\n");
  17.         } else {
  18.             printf("Connection failed\n");
  19.         }
  20.         mysql_close(conn_ptr);
  21.         return EXIT_SUCCESS;
  22.     }
通过gcc编译(我的mysql源码安装目录为 /usr/local/mysql)

 

gcc -o connect -g connect.c  -I /usr/local/mysql/include/ -L /usr/local/mysql/lib/ -l mysqlclient

 

参数说明:-I(大写的i) 表示要连接的头文件目录,因为使用了<mysql.h> ,-L表示要连接的库文件目录 -l(小写的L) 表示要连接的具体的库名称,在/usr/local/mysql/lib/ 下,有叫做libmysqlclient.so的库,指定具体的库的名字时,默认去掉头尾的lib和.so直接使用中间的mysqlclient

如果不用-I -L ,可能导致找不到头文件 或者 函数未定义的错误

 

如果出现错误error while loading shared libraries,那是因为.so没有被系统载入,解决办法如下

vi /etc/ld.so.conf // 打开ld.so.conf文件,增加.so文件的路径,比如/usr/local/mysql/lib/

ldconfig //重新加载.so文件

 

查询代码

点击(此处)折叠或打开

  1. #include <stdio.h>
  2.     #include <stdlib.h>
  3.     #include <mysql.h>
  4.     int main() {
  5.         MYSQL *conn_ptr;
  6.         MYSQL_RES *res_ptr;
  7.         MYSQL_ROW sqlrow;
  8.         MYSQL_FIELD *fd;
  9.         int res, i, j;
  10.       
  11.         conn_ptr = mysql_init(NULL);
  12.         if (!conn_ptr) {
  13.             return EXIT_FAILURE;
  14.         }
  15.         conn_ptr = mysql_real_connect(conn_ptr, "localhost", "root", "123456", "test", 0, NULL, 0);
  16.         if (conn_ptr) {
  17.             res = mysql_query(conn_ptr, "select name,age from user"); //查询语句
  18.             if (res) {
  19.                 printf("SELECT error:%s\n",mysql_error(conn_ptr));
  20.             } else {
  21.                 res_ptr = mysql_store_result(conn_ptr); //取出结果集
  22.                 if(res_ptr) {
  23.                     printf("%lu Rows\n",(unsigned long)mysql_num_rows(res_ptr));
  24.                     j = mysql_num_fields(res_ptr);
  25.                     while((sqlrow = mysql_fetch_row(res_ptr))) { //依次取出记录
  26.                         for(i = 0; i < j; i++)
  27.                             printf("%s\t", sqlrow[i]); //输出
  28.                         printf("\n");
  29.                     }
  30.                     if (mysql_errno(conn_ptr)) {
  31.                         fprintf(stderr,"Retrive error:s\n",mysql_error(conn_ptr));
  32.                     }
  33.                 }
  34.                 mysql_free_result(res_ptr);
  35.             }
  36.         } else {
  37.             printf("Connection failed\n");
  38.         }
  39.         mysql_close(conn_ptr);
  40.         return EXIT_SUCCESS;
  41.     }

插入更新及删除


点击(此处)折叠或打开

  1. #include <stdlib.h>
  2.     #include <stdio.h>
  3.     #include <mysql.h>
  4.     int main() {
  5.         MYSQL *conn_ptr;
  6.         int res;
  7.       
  8.         conn_ptr = mysql_init(NULL);
  9.         if (!conn_ptr) {
  10.             printf("mysql_init failed\n");
  11.             return EXIT_FAILURE;
  12.         }
  13.         conn_ptr = mysql_real_connect(conn_ptr, "localhost", "root", "123456", "test", 0, NULL, 0);
  14.         if (conn_ptr) {
  15.             res = mysql_query(conn_ptr, "insert into user values(null,'Ann',5)"); //可以把insert语句替换成delete或者update语句,都一样的
  16.     // res = mysql_query(conn_ptr, "delete from user where name = 'Ann' and age < 10");
  17.             if (!res) { //输出受影响的行数
  18.                 printf("Inserted %lu rows\n",(unsigned long)mysql_affected_rows(conn_ptr));
  19.             } else { //打印出错误代码及详细信息
  20.                 fprintf(stderr, "Insert error %d: %sn",mysql_errno(conn_ptr),mysql_error(conn_ptr));
  21.             }
  22.         } else {
  23.             printf("Connection failed\n");
  24.         }
  25.         mysql_close(conn_ptr);
  26.         return EXIT_SUCCESS;
  27.     }








<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(36) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
### 回答1: C语言可以通过调用API来连接数据库进行增删改查操作。 一般常用的数据库有MySQL、Oracle、SQL Server等。以下以MySQL为例来说明: 1. 安装MySQL C连接器 要连接MySQL数据库,需要先安装MySQL C连接器,在Ubuntu Linux环境下,使用以下命令安装:sudo apt-get install libmysqlclient-dev 2. 连接MySQL数据库 在连接MySQL数据库之前,需要先定义一个MYSQL结构体来存储连接信息,例如: MYSQL mysql; mysql_init(&mysql); mysql_real_connect(&mysql, "localhost", "root", "root", "testdb", 0, NULL, 0); 其中, "localhost"是MySQL服务器的IP地址,"root"是MySQL服务器的用户名, "root"是MySQL服务器的密码,"testdb"是要连接数据库名。 3. 增加数据 使用MySQL的C API可以很方便地执行增删改查操作,以下是一个添加数据的例子: char query[1000]; sprintf(query, "insert into student(name, age) values('%s', %d)", "张三", 18); mysql_query(&mysql, query); 其中,%s和%d是占位符,可以用具体的值去替换。这里是将一个名为“张三”的学生信息添加到名为“student”的表中。 4. 删除数据 与增加数据类似,删除数据也很简单。以下是一个删除数据的例子: char query[1000]; spintf(query, "delete from student where id=%d", 3); mysql_query(&mysql, query); 其中,id=3的学生将被删除。 5. 修改数据 以下是一个修改数据的例子: char query[1000]; sprintf(query, "update student set name='%s' where id=%d", "李四", 4); mysql_query(&mysql, query); 其中,id=4的学生的姓名将被修改为“李四”。 6. 查询数据 以下是一个查询数据的例子: char query[1000]; sprintf(query, "select * from student"); mysql_query(&mysql, query); MYSQL_RES *result = mysql_store_result(&mysql); int num_fields = mysql_num_fields(result); MYSQL_ROW row; while ((row = mysql_fetch_row(result))) { for (int i = 0; i < num_fields; i++) { printf("%s ", row[i] ? row[i] : "NULL"); } printf("\n"); } 以上是一个简单的查询数据的例子,它将名为“student”的表中的所有记录都输出到控制台上。 总结 通过MySQL C API,可以在C语言中方便地连接MySQL数据库,并对其进行增删改查操作。这种方式比较灵活,但是比较底层,需要编写大量的代码来实现相对比较简单的操作。对于一般的应用程序,可以考虑使用ORM框架来简化代码编写。 ### 回答2: 连接数据库并进行增删改查数据库应用的基础操作,以下是一个简单的步骤如下: 1. 安装数据库:首先需要安装合适的数据库服务,比如MySQL、Oracle、SQLServer等等。安装完毕后启动数据库服务。 2. 连接数据库:在启动数据库服务后,使用编程语言(如Java、Python、C#等等)提供的API接口连接数据库中。 3. 编写数据操作代码:连接数据库后,可以对数据库进行数据查询、数据插入、数据数据删除等等操作编写代码时需要使用SQL语句或ORM框架。 4. 运行代码:将编写好的代码运行程序程序将会连接数据库并执行指定的数据操作。 5. 验证结果:程序执行完成后,可以查看操作是否执行成功,在数据库中查看对应的数据是否已经操作成功。 需要注意的是,每个数据库软件有不同的连接串、驱动及API,具体使用方法需要参考各自的API文档。此外,为了保证数据的安全性,从编写数据操作代码到运行代码,要确保代码没有漏洞,防止黑客利用SQL注入等攻击获取数据,这是数据库应用开发者需要注意的问题。 ### 回答3: 在进行数据操作之前,我们需要先通过编程语言提供的库或框架连接数据库。在c语言中,我们可以使用MySQL自带的C API或第三方库,如libmysqlclient等。 连接数据库的步骤一般为:初始化MySQL库、获取连接句柄、设置连接选项、建立连接等。连接成功后,就可以进行增删改查操作了。 增加数据可以使用SQL语句INSERT INTO,将数据插入到指定的表中。 删除数据可以使用SQL语句DELETE FROM,将指定条件的数据从表中删除。 修改数据可以使用SQL语句UPDATE,根据指定条件修改表中的数据。 查询数据可以使用SQL语句SELECT,根据条件查询表中的数据,并将结果返回给程序处理。 通常是先在c程序中构造SQL语句,再通过MySQL提供的函数进行执行和处理结果。需要注意的是,在进行数据操作时应充分考虑数据安全问题,如避免SQL注入攻击等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值