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

原文地址::https://blog.csdn.net/xiajun07061225/article/details/8505987

相关文章

1、远程访问ubuntu下mysql数据库----https://blog.csdn.net/toby54king/article/details/80781762

2、Ubuntu下远程访问MySQL数据库----https://www.cnblogs.com/wdpp/archive/2011/11/16/2386721.html

3、Ubuntu安装mysql数据库----https://jingyan.baidu.com/article/20b68a88e0dfad796dec6243.html

4、Ubuntu下安装MySQL及简单操作----https://www.linuxidc.com/linux/2016-07/133128.htm

5、Mysql C API编程指南----https://blog.csdn.net/superhua_nic/article/details/7401596?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.control

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

MySQL数据库环境配置

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

sudo apt-get install mysql-server mysql-client


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

sudo apt-get install libmysqlclient15-dev

在MySQL中建立相应数据库

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

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

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.  
  8. INSERT INTO children(childno,fname,age) VALUES(1,'Jenny',21);

  9. INSERT INTO children(childno,fname,age) VALUES(2,'Andrew',17);

  10. INSERT INTO children(childno,fname,age) VALUES(3,'Gavin',8);

  11. INSERT INTO children(childno,fname,age) VALUES(4,'Duncan',6);

  12. INSERT INTO children(childno,fname,age) VALUES(5,'Emma',4);

  13. INSERT INTO children(childno,fname,age) VALUES(6,'Alex',15);

  14. INSERT INTO children(childno,fname,age) VALUES(7,'Adrian',9);


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

MySQL数据库连接测试

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

 
  1. #include <stdlib.h>

  2. #include <stdio.h>

  3.  
  4. #include "mysql.h"

  5.  
  6. int main(int argc,char *argv[])

  7. {

  8. MYSQL *conn_ptr;

  9. conn_ptr = mysql_init(NULL);

  10.  
  11. if(!conn_ptr)

  12. {

  13. fprintf(stderr,"mysql_init failed\n");

  14. return EXIT_FAILURE;

  15. }

  16.  
  17. conn_ptr = mysql_real_connect(conn_ptr,"localhost","rick","rick","foo",0,NULL,0);

  18.  
  19. if(conn_ptr)

  20. printf("Connection success\n");

  21. else

  22. printf("Connection failed\n");

  23.  
  24. mysql_close(conn_ptr);

  25.  
  26. return EXIT_SUCCESS;

  27. }

执行结果:

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

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

执行SQL语句进行数据操作

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

 
  1. #include <stdlib.h>

  2. #include <stdio.h>

  3.  
  4. #include "mysql.h"

  5.  
  6. int main()

  7. {

  8. MYSQL my_connecyion;

  9. int res;

  10.  
  11. mysql_init(&my_connecyion);

  12.  
  13. if(mysql_real_connect(&my_connecyion,"localhost","rick","rick","foo",0,NULL,0))

  14. {

  15. printf("Connection success\n");

  16.  
  17. //执行SQL语句

  18. res = mysql_query(&my_connecyion,"INSERT INTO children(fname,age) VALUES('Ann',3)");

  19.  
  20. if(!res)

  21. printf("Inserted %lu rows\n",(unsigned long)mysql_affected_rows(&my_connecyion));

  22. else

  23. fprintf(stderr,"Insert error %d : %s \n",mysql_errno(&my_connecyion),mysql_error(&my_connecyion));

  24.  
  25. mysql_close(&my_connecyion);

  26. }

  27. else{

  28. fprintf(stderr,"Connection failed\n");

  29. if(mysql_errno(&my_connecyion))

  30. fprintf(stderr,"Connection error %d : %s\n",mysql_errno(&my_connecyion),mysql_error(&my_connecyion));

  31. }

  32.  
  33. return EXIT_SUCCESS;

  34. }


运行结果:

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

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

猜你喜欢

转载自blog.csdn.net/xqhrs232/article/details/113182149