【Linux】Ubuntu下C语言访问MySQL数据库入门

时间:2023-03-09 03:04:10
【Linux】Ubuntu下C语言访问MySQL数据库入门

使用的系统是Ubuntu 11.10.数据库是MySQL。

MySQL数据库环境配置

首先需要安装MySQL客户端和服务器,命令行安装方式为:

  1. sudo apt-get install mysql-server mysql-client

然后,要使用C语言编程访问数据库,需要另外安装一个开发包:

  1. sudo apt-get install libmysqlclient15-dev

【Linux】Ubuntu下C语言访问MySQL数据库入门

在MySQL中建立相应数据库

首先以用户rick登录MySQL数据库(用户rick已经被root权限用户赋予了创建数据库等等的权限):

【Linux】Ubuntu下C语言访问MySQL数据库入门

然后创建一个名为foo的数据库:

  1. CREATE DATABASE foo;

然后利用如下SQL语句创建表及插入数据:

  1. CREATE TABLE children(
  2. childno int(11) NOT NULL auto_increment,
  3. fname varchar(30),
  4. age int(11),
  5. PRIMARY KEY (childno)
  6. );
  7. INSERT INTO children(childno,fname,age) VALUES(1,'Jenny',21);
  8. INSERT INTO children(childno,fname,age) VALUES(2,'Andrew',17);
  9. INSERT INTO children(childno,fname,age) VALUES(3,'Gavin',8);
  10. INSERT INTO children(childno,fname,age) VALUES(4,'Duncan',6);
  11. INSERT INTO children(childno,fname,age) VALUES(5,'Emma',4);
  12. INSERT INTO children(childno,fname,age) VALUES(6,'Alex',15);
  13. INSERT INTO children(childno,fname,age) VALUES(7,'Adrian',9);

在MySQL命令行模式中执行方法如下:

【Linux】Ubuntu下C语言访问MySQL数据库入门

MySQL数据库连接测试

然后采用如下C语言进行数据库连接测试connect1.c:

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "mysql.h"
  4. int main(int argc,char *argv[])
  5. {
  6. MYSQL *conn_ptr;
  7. conn_ptr = mysql_init(NULL);
  8. if(!conn_ptr)
  9. {
  10. fprintf(stderr,"mysql_init failed\n");
  11. return EXIT_FAILURE;
  12. }
  13. conn_ptr = mysql_real_connect(conn_ptr,"localhost","rick","rick","foo",0,NULL,0);
  14. if(conn_ptr)
  15. printf("Connection success\n");
  16. else
  17. printf("Connection failed\n");
  18. mysql_close(conn_ptr);
  19. return EXIT_SUCCESS;
  20. }

执行结果:

【Linux】Ubuntu下C语言访问MySQL数据库入门

注意的是:需要指定include库和库文件的路径名,以及指定链接的库模块mysqlclient。

如果不在开始的时候安装开发包,就会产生如下错误:

【Linux】Ubuntu下C语言访问MySQL数据库入门

执行SQL语句进行数据操作

向数据库表children中插入一行:

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "mysql.h"
  4. int main()
  5. {
  6. MYSQL my_connecyion;
  7. int res;
  8. mysql_init(&my_connecyion);
  9. if(mysql_real_connect(&my_connecyion,"localhost","rick","rick","foo",0,NULL,0))
  10. {
  11. printf("Connection success\n");
  12. //执行SQL语句
  13. res = mysql_query(&my_connecyion,"INSERT INTO children(fname,age) VALUES('Ann',3)");
  14. if(!res)
  15. printf("Inserted %lu rows\n",(unsigned long)mysql_affected_rows(&my_connecyion));
  16. else
  17. fprintf(stderr,"Insert error %d : %s \n",mysql_errno(&my_connecyion),mysql_error(&my_connecyion));
  18. mysql_close(&my_connecyion);
  19. }
  20. else{
  21. fprintf(stderr,"Connection failed\n");
  22. if(mysql_errno(&my_connecyion))
  23. fprintf(stderr,"Connection error %d : %s\n",mysql_errno(&my_connecyion),mysql_error(&my_connecyion));
  24. }
  25. return EXIT_SUCCESS;
  26. }

运行结果:

【Linux】Ubuntu下C语言访问MySQL数据库入门

【Linux】Ubuntu下C语言访问MySQL数据库入门

在这里特别需要注意的是:

函数mysql_affected_rows返回的是被一个更新操作修改的行数,而不是满足where子句的行数。