您当前的位置: 首页 > 数据库教程 > MySQL教程 > MySQL学习笔记_11_Linux下C++/C连接MySQL数据库(一)

MySQL学习笔记_11_Linux下C++/C连接MySQL数据库(一)

作者:不详 来源:网络 发布时间: 2014-07-17 12:12 点击:
Linux 下 C++/C 连接 MySQL 数据库(一) 一、连接前准备 原材料:Ubuntu12.04LTS (已经安装了MySQL5.5或者更高级版本,新立得软件包,gcc/g++或者CodeBlosks编译器) 安装了以上的软件包后,我们可以正常使用MySQL完成数据管理工作,但是很多时候我们需要通过编写程序访

MySQL学习笔记_11_Linux下C++/C连接MySQL数据库(一)

  Linux 下 C++/C 连接 MySQL 数据库(一)

  一、连接前准备

  原材料:Ubuntu12.04LTS

  (已经安装了MySQL5.5或者更高级版本,新立得软件包,gcc/g++或者CodeBlosks编译器)

  安装了以上的软件包后,我们可以正常使用MySQL完成数据管理工作,但是很多时候我们需要通过编写程序访问MySQL。此时,在程序中需要加载MySQL驱动头文件,但是默认这些驱动包是没有安装的,因此我们需要在新立得中找到"libmysqld-dev"包并安装。

  安装完成之后,在”/usr/include/mysql/”目录下会有很多相对应的头文件,如mysql.h等。

  当写好程序,需要编译时:

  1、如果选用的是使用gcc/g++在命令行下完成,则需要加上-lmysqlclient选项。如:

  ?

  

  

  

  

  

  

  

  


  1

  


  g++ -lmysqlclient mysql_test.cc -o mysqltest

  


  2、如果选用的是CodeBlocks,则需在构建选项中,将连接库设为mysqlclient。

  开始编译。

  二、头文件及相关函数分析

  这篇博客中所列的函数全部包含在头文件下,因此,需要在程序编写开始处,加入一行:

  ?

  

  

  

  

  

  

  

  


  1

  


  #include <mysql/mysql.h>

  


  1、用CAPI连接MySQL数据库有两个步骤:

  1)初始化一个连接句柄

  2)建立连接

  所用到的函数如下:

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  


  MYSQL *mysql_init(MYSQL *connection);         // 初始化连接句柄

  //成功返回MySQL结构指针,失败返回NULL

  MYSQL *mysql_real_connect(MYSQL *connection,

                       const char *server_host,                   

                       const char *sql_user_name,

                       const char *sql_password,

                       const char *db_name,

                       unsigned int port_number,

                       const char *unix_socket_name,

                       unsigned int flags); //建立连接

  //成功返回MySQL结构指针,失败返回NULL

  


  2、MySQL连接工作完成之后,需要对MySQL的连接进行释放

  ?

  

  

  

  

  

  

  

  


  1

  2

  


  void mysql_close(MYSQL *connection); //关闭连接

  //参数connection被清空,指针变为无效

  


  3、mysql_options用于设置额外选项,并影响连接行为,但是它只能在mysql_init和mysql_real_connect之间调用

  ?

  

  

  

  

  

  

  

  


  1

  


  int mysql_options(MYSQL *connection, enum mysql_option option, const char *argument);         //设置连接选项

  


  option的值为下列四个值之一:

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  


  MYSQL_INIT_COMMAND //连接到MySQL服务器时将执行的命令,再次连接时将自动再次执行。

  MYSQL_OPT_CONNECT_TIMEOUT //连接超时前的等待秒数

  MYSQL_OPT_COMPRESS     //网络连接中使用压缩机制

  MYSQL_OPT_PROTOCOL //要使用的协议类型,影视mysql.h中定义的mysql_protocol_type枚举值之一

  


  4、以上的函数是在假设没有错误的情况下运行,如果数据库连接过程中出现了错误,我们就需要以下两个函数来处理错误信息:

  ?

  

  

  

  

  

  

  

  


  1

  2

  


  unsigned int mysql_errno(MYSQL *connection); //返回错误代码(0表示为出现错误)

  char *mysql_error(MYSQL *connection);     //返回错误信息,是以NULL作为终结的字符串

  


  5、程序访问数据库不只是与数据库建立连接,更重要的是通过SQL语句的执行查询或改变数据库中数据。执行SQL语句可以通过下列函数实现。

  ?

  

  

  

  

  

  

  

  


  1

  


  int mysql_query(MYSQL *connection, const char *query);

  


  SQL语句分为两类,返回数据的SQL和不返回数据的SQL(UPDATE、DELETE、INSERT)。

  下面我们只介绍不返回数据的SQL

  ?

  

  

  

  

  

  

  

  


  1

  2

  


  my_ulonglong mysql_affected_rows(MYSQL *connection); //返回查询受影响的行

  //对一段SQL语句执行后可以通过调用此函数查看SQL语句执行后,数据库中数据状态改变的行数,以此判断SQL的执行成功与否。

  


  三、实例

  ?

  

  

  

  

  

  

  

  


  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  23

  24

  25

  26

  27

  28

  29

  30

  31

  32

  33

  34

  35

  36

  37

  38

  39

  40

  41

  42

  43

  44

  45

  46

  47

  48

  49

  50

  51

  52

  53

  54

  55

  56

  57

  58

  59

  60

  61

  62

  63

  64

  65

  66

  67

  68

  69

  70

  71

  72

  73

  


  #include <iostream>

  #include <fstream>

  #include <cstdlib>

  #include <mysql/mysql.h>

  using namespace std;

  void mysql_err_function(MYSQL * connection);

  int main()

  {

  //freopen("input.txt","r",stdin);

  MYSQL * connection;

  connection = mysql_init(NULL);

  if (!connection)

  {

     cout << "mysql_init failed!" << endl;

     exit(-1);

  }

  if (!mysql_real_connect(connection,"localhost","root","123456","test",0,NULL,0))

  {

     cout << "Connection To MySQL failed!" << endl;

     mysql_err_function(connection);

  }

  cout << "Connection To MySQL Server is Success..." << endl;

  string str;

  getline(cin,str);

  int res = 0;

  int affected_count = 0;

  while (str != "close" && str != "" && !res)

  {

     res = mysql_query(connection,str.c_str());

     affected_count += mysql_affected_rows(connection);

     if (res)

     {

         if (mysql_errno(connection))

         {

             cout << "Error " << mysql_errno(connection) << " : "

                  << mysql_error(connection) << 'n' << endl;

             break;

         }

     }

     getline(cin,str);

  }

  cout << "Have affected " << affected_count << " rows!" << endl;

  mysql_close(connection);

  cout << "Connection To MySQL Server is closed..." << endl;

  return 0;

  }

  void mysql_err_function(MYSQL * connection)

  {

  if (mysql_errno(connection))

  {

     cout << "Error " << mysql_errno(connection) << " : "

          << mysql_error(connection) << endl;

     exit(-1);

  }

  }

  
分享到:
本文"MySQL学习笔记_11_Linux下C++/C连接MySQL数据库(一)"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4