linux ubuntu下C语言与数据库mysql连接

MySQL数据库环境配置


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

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

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

  1. sudo apt-get install libmysqlclient15-dev 
sudo apt-get install libmysqlclient15-dev


在MySQL中建立相应数据库

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


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

  1. CREATE DATABASE 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); 
CREATE TABLE children(
    childno int(11) NOT NULL auto_increment,
    fname varchar(30),
    age int(11),
    PRIMARY KEY (childno)
    );

INSERT INTO children(childno,fname,age) VALUES(1,'Jenny',21);
INSERT INTO children(childno,fname,age) VALUES(2,'Andrew',17);
INSERT INTO children(childno,fname,age) VALUES(3,'Gavin',8);
INSERT INTO children(childno,fname,age) VALUES(4,'Duncan',6);
INSERT INTO children(childno,fname,age) VALUES(5,'Emma',4);
INSERT INTO children(childno,fname,age) VALUES(6,'Alex',15);
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.   MYSQL *conn_ptr; 
  8.   conn_ptr = mysql_init(NULL); 
  9.  
  10.   if(!conn_ptr) 
  11.   { 
  12.     fprintf(stderr,"mysql_init failed\n"); 
  13.     return EXIT_FAILURE; 
  14.   } 
  15.  
  16.   conn_ptr = mysql_real_connect(conn_ptr,"localhost","rick","rick","foo",0,NULL,0); 
  17.  
  18.   if(conn_ptr) 
  19.     printf("Connection success\n"); 
  20.   else 
  21.     printf("Connection failed\n"); 
  22.  
  23.   mysql_close(conn_ptr); 
  24.  
  25.   return EXIT_SUCCESS; 
#include <stdlib.h>
#include <stdio.h>

#include "mysql.h"

int main(int argc,char *argv[])
{
  MYSQL *conn_ptr;
  conn_ptr = mysql_init(NULL);

  if(!conn_ptr)
  {
    fprintf(stderr,"mysql_init failed\n");
    return EXIT_FAILURE;
  }

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

  if(conn_ptr)
    printf("Connection success\n");
  else
    printf("Connection failed\n");

  mysql_close(conn_ptr);

  return EXIT_SUCCESS;
}
执行结果:

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

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


执行SQL语句进行数据操作

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

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

#include "mysql.h"

int main()
{
  MYSQL my_connecyion;
  int res;

  mysql_init(&my_connecyion);

  if(mysql_real_connect(&my_connecyion,"localhost","rick","rick","foo",0,NULL,0))
  {
    printf("Connection success\n");

    //执行SQL语句
    res = mysql_query(&my_connecyion,"INSERT INTO children(fname,age) VALUES('Ann',3)");

    if(!res)
      printf("Inserted %lu rows\n",(unsigned long)mysql_affected_rows(&my_connecyion));
    else
      fprintf(stderr,"Insert error %d : %s \n",mysql_errno(&my_connecyion),mysql_error(&my_connecyion));

    mysql_close(&my_connecyion);
  }
  else{
    fprintf(stderr,"Connection failed\n");
    if(mysql_errno(&my_connecyion))
      fprintf(stderr,"Connection error %d : %s\n",mysql_errno(&my_connecyion),mysql_error(&my_connecyion));
  }

  return EXIT_SUCCESS;
}

运行结果:




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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值