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

MySQL数据库环境配置

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

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

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

  1. sudo apt-get install libmysqlclient15-dev

在MySQL中建立相应数据库

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

然后创建一个名为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命令行模式中执行方法如下:

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

执行结果:

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

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

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

运行结果:

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

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

【Linux】Ubuntu下C语言访问MySQL数据库入门的更多相关文章

  1. Linux CentOS下安装、配置mysql数据库

    假设要在Linux上做j2ee开发.首先得搭建好j2ee的开发环境.包含了jdk.tomcat.eclipse的安装(这个在之前的一篇随笔中已经有具体解说了Linux学习之CentOS(七)--Cen ...

  2. Linux下C语言操作MySQL数据库

    MySQL是Linux系统下广泛使用的开源免费数据库,是Linux应用程序数据存储的首选. Ubuntu下安装 […]

  3. Windows7-32位系统下R语言链接mySQL数据库步骤

    安装R和MySQL在此就不再多说了.网上有非常多教程能够找到.以下直接进入到odbc的安装流程. 1.下载安装mysql-connector-odbc-5.x.x-win32.msi 下载地址:htt ...

  4. Linux系统下实现远程连接MySQL数据库的方法教程

    1.在服务器端开启远程访问首先进入mysql数据库,然后输入下面两个命令: grant all privileges on *.* to 'root'@'%' identified by 'passw ...

  5. C语言访问mysql数据库

    mysql中新建的数据库为hyx,hyx中的表为my_schema,表中的数据为下图: 编写代码,访问表中的数据,测试代码如下: #include "stdafx.h" #incl ...

  6. Linux centos 7/ubantu下: 用 C 语言连接 MySQL数据库

    前言:最近用IPC.socket做ATM.聊天项目,考虑到需要用到数据库,所以总结一下centos.ubantu环境下怎么用C语言操作数据库,例如常见的增删改查等! 一.Centos环境安装mysql ...

  7. Linux下eclipse及mysql安装,c++访问mysql数据库

    这两天在学习linux下用c++访问mysql,碰到一堆问题,记录一下. 1.mysql安装: 公司的电脑是64位的,安装的是64为的RHEL4,安装如下三个包: MySQL-client-5.1.4 ...

  8. Linux下C++访问MySQL数据库

    由于想要开始了解并学习用LAMP进行web开发,所以昨晚我在Fedora上安装了MySQL,学习了MySQL的几个常用命令.想着在学习进行web开发(PHP访问数据库)之前,先用我熟悉的C++连接数据 ...

  9. Linux(Ubuntu)下MySQL的安装与配置

    转自:http://www.2cto.com/database/201401/273423.html 在Linux下MySQL的安装,我一直觉得挺麻烦的,因为之前安装时就是由于复杂的配置导致有点晕.今 ...

随机推荐

  1. CentOS command

    管理centos服务器的时候常会对文件进行一些常规操作,除了ftp之外了解在ssh下必要的文件操作命令那也是必不可少的,以下摘录一些常用的文件操作命令: 文件操作: ls ####查看目录中的文件## ...

  2. HDU - 3584 Cube (三维树状数组 + 区间改动 + 单点求值)

    HDU - 3584 Cube Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Subm ...

  3. 获取路由事件的源Source和OriginalSource

    路由事件的消息包括在RoutedEventArgs实例中,该实例有两个属性Source和OriginalSource,都是表示路由事件传递的起点.即事件消息的源头.仅仅只是Source表示的是Logi ...

  4. vmstat输出项解释

    输出项的解释例如以下: procs * r列表示执行和等待cpu时间片段的进程数,这个值假设长期大约系统cpu个数.说明cpu不足 * b列表示在等待资源的进程数.比方正在等待IO或者内存交换等等 m ...

  5. jdk、jre、spring、java ee、java se

    1 java se.java ee和java me 这三个是java的标准.java se是根本,java ee建立在java se上,用于server.java me是java se的子集,用于终端 ...

  6. spark hadoop 对比 Resilient Distributed Datasets

    hadoop 迭代消耗大 每次迭代启动一个完整的MapReduce作业 spark 首要目标就是避免运算时 过多的网络和磁盘IO开销 Resilient Distributed Datasets ht ...

  7. 代理ip 测试

    Line #1218 : 101.232.208.245 - - [16/Jan/2018:02:47:34 +0800] "GET /?xltestdesfs HTTP/1.1" ...

  8. 【CSU 1756】Prime

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1756 直接暴力O(n^2logn)过不了 两两算gcd 考虑每个数的范围[1,1000]统计一下即 ...

  9. 美国诚实签经验——中英文行程单、往返机票、用英语面试的申请者通过率>用中文面试的申请者的通过率、一直保持着微笑,看上去很自信,也很诚恳、户口簿带上最好

    在排队等待时据我的观察,用英语面试的申请者通过率>用中文面试的申请者的通过率.一家人申请通过率>单个人通过率:商务签证通过率>旅游签证通过率 一.    面签材料 1.    必备材 ...

  10. python 使用.bat文件自动执行

    @echo off title demo cmd "/c activate py36 && cd demo&& python demo_test.py&quo ...