专栏首页用户2442861的专栏【Linux】Ubuntu下C语言访问MySQL数据库入门

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

转载于http://blog.csdn.net/xiajun07061225/article/details/8505987

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

MySQL数据库环境配置

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

[cpp] view plaincopyprint?

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

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

[cpp] view plaincopyprint?

  1. sudo apt-get install libmysqlclient15-dev  

在MySQL中建立相应数据库

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

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

[cpp] view plaincopyprint?

  1. CREATE DATABASE foo;  

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

[cpp] view plaincopyprint?

  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命令行模式中执行方法如下:

MySQL数据库连接测试

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

[cpp] view plaincopyprint?

  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. }  

执行结果:

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

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

执行SQL语句进行数据操作

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

[cpp] view plaincopyprint?

  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. }  

运行结果:

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 阿尔法狗是怎么用机器学习做决策的

    雷锋网注:本文作者许铁, 法国巴黎高师物理硕士 ,以色列理工大学(以色列85%科技创业人才的摇篮, 计算机科学享誉全球)计算神经科学博士,巡洋舰科技有限公司创...

    bear_fish
  • Ubuntu下的mysql安装

    转载于http://blog.chinaunix.net/uid-26275986-id-4051976.html(如果不允许转载博主告诉我哈)

    bear_fish
  • 网络七层的功能

     网络七层包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。其中物理层、数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象;传输层、会...

    bear_fish
  • phpstudy升级mysql5.7以及遇到的问题汇总

    最近学习java的时候建数据库,用到了create_time和update_time,我想设置成current_time,但是在mysql5,7之前貌似不支持...

    听城
  • 【专家痛陈AI医学影像三大难点】数据规模小、标注质量差、懂算法的不懂医疗

    【新智元导读】中金公司(CICC)此前发布的人工智能相关领域证券研究报告指出,数据获取、数据标注和跨学科人才积累已经成为医疗影像识别进一步推进的三个关键点。深睿...

    新智元
  • 美国为例 | 大数据时代政府如何“把数据作为资产进行管理”

    上世纪60年代,《信息自由法案》(FOIA)为现代美国政府的公开与透明制定了行为准则。该法案允许任何人向政府要求特定信息的开放,而政府部门则必须进行回应并在信息...

    小莹莹
  • 深度剖析“开放政府数据”

    大数据文摘
  • linux debian系统使用mysql教程

    mysql的配置文件名为my.cnf  但是当我们安装mysql时,可能会出现多个my.cnf文件(我们可以根据不同的情况,去引入不同的配置启动mysql)

    仙士可
  • 深度剖析“开放政府数据”

    导读 开发一款全国人民都能使用的“找公厕”APP的核心障碍是什么?是开发者缺少关于公厕的数据。这就涉及到开放政府数据的问题。政府数据既能够推动经济增长乃至经济增...

    小莹莹
  • MySQL 入门常用命令大全(上)

    作为一个 MySQL 的初学者,在短短的几个月中接触了一下,记录了一下工作中用到的 SQL 语句以及未来可能会用到的 MySQL 知识点,作为日后的参考手册。因...

    serena

扫码关注云+社区

领取腾讯云代金券