使用C语言访问MySQL数据 您所在的位置:网站首页 c语言连接数据库老断 使用C语言访问MySQL数据

使用C语言访问MySQL数据

2024-01-04 01:09| 来源: 网络整理| 查看: 265

2011-05-09 wcdj

 

 

可以通过许多不同的编程语言来访问MySQL,例如,C,C++,Java,Perl,Python,Tcl,PHP等。本文主要总结使用C语言接口如何访问MySQL数据。 (一) 连接例程 (二) 错误处理

(一) 连接例程 用C语言连接MySQL数据库包含两个步骤: (1) 初始化一个连接句柄结构。使用 mysql_init 来初始化连接句柄。 (2) 实际进行连接。使用 mysql_real_connect 来向一个连接提供参数。 其余步骤: (3) 使用完连接之后,使用 mysql_close 关闭连接。 (4) mysql_options 用于设置选项。注意:仅能在 mysql_init 和 mysql_real_connect 之间调用。mysql_options 一次只能设置一个选项,所以每设置一个选项就得调用它一次。  具体过程如下: 登录mysql $ mysql -u root -p 输入密码 创建一个本地用户wcdj mysql> GRANT ALL ON *.* TO wcdj@localhost IDENTIFIED BY 'secretpassword';   (注意:最后的分号) 退出root用户 mysql> /q Bye 登录新创建的用户wcdj $ mysql -u wcdj --password=secretpassword 创建一个新的数据库newdatabase mysql> CREATE DATABASE newdatabase; 退出wcdj用户 mysql> /q 编写 create_children.sql 文件,用于创建表和添加数据。 -- -- Create the table children -- CREATE TABLE children (     childno int(11) NOT NULL auto_increment,     fname varchar(30),     age int(11),     PRIMARY KEY (childno) ); -- -- Populate the table 'children' -- INSERT INTO children(childno, fname, age) VALUES (1, 'wcdj', 21); INSERT INTO children(childno, fname, age) VALUES (2, 'gerry', 22); INSERT INTO children(childno, fname, age) VALUES (3, 'echo', 23); 登录mysql $ mysql -u wcdj --password=secretpassword newdatabase   (注意,后面的newdatabase用于指定使用的数据库) 在新的数据库newdatabase中创建表children并添加数据: mysql> /. create_children.sql 查看新添加的数据: SELECT * from children; 1   wcdj    21 2   gerry   22 3   echo    23 connect1.c

 

#include    #include    #include "mysql.h"   int main()   {       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", "wcdj", "123", "newdatabase", 0, NULL, 0);       if(conn_ptr)       {           printf("Connection success/n");       }       else       {           printf("Connection failed/n");       }       mysql_close(conn_ptr);       return EXIT_SUCCESS;   }  

编译程序: $ gcc -I/usr/include/mysql connect1.c -L/usr/lib/mysql -lmysqlclient -o connet1 测试: $ ./connect1 Connection success $

 

(二) 错误处理 (1) unsigned int mysql_errno(MYSQL *connection);    (错误码) (2) char *mysql_error(MYSQL *connection);        (文本错误信息)     可以通过调用 mysql_errno 并传递连接结构来获得错误码,它通常都是非0值。如果未设定错误码,它将返回0。 注意:因为每次调用库都会更新错误码,所以你只能得到最后一个执行命令的错误码。但是,上面列出的两个错误检查例程是例外,它们不会导致错误码的更新。 也可以调用 mysql_error ,来提供有意义的文本信息而不是单调的错误码。这些信息被写入一些内部静态内存空间中,所以如果想保存错误文本,你需要把它复制到别的地方。 注意:当调用 mysql_real_connect 时会遇到一个问题,因为它在失败时返回NULL指针,并没有提供一个错误码。但如果你将连接句柄作为一个变量,那么即使 mysql_real_connect 失败,你仍然能够处理它。 connect2.c 使用非动态分配的连接结构,以及编写一些基本的错误处理代码。

#include    #include    #include "mysql.h"   int main()   {       MYSQL my_connection;       mysql_init(&my_connection);              if (mysql_real_connect(&my_connection, "localhost", "wcdj", "123", "newdatabase", 0, NULL, 0))       {           printf("Connection success/n");           mysql_close(&my_connection);       }       else       {           fprintf(stderr, "Connection failed/n");           if (mysql_errno(&my_connection))           {               fprintf(stderr, "Connection error %d: %s/n", mysql_errno(&my_connection),               mysql_error(&my_connection));           }       }       return EXIT_SUCCESS;   }  

编译程序: $ gcc -I/usr/include/mysql connect2.c -L/usr/lib/mysql -lmysqlclient -o connet2 假设当前没有创建 newdatabase 这个数据库,运行 connect2 将提示如下错误信息: 测试: $ ./connect2 Connection failed Connection error 1049: Unknown database 'newdatabase' 登录mysql $ mysql -u wcdj --password=123 创建一个新的数据库newdatabase mysql> CREATE DATABASE newdatabase; 退出wcdj用户 mysql> /q 再此测试 connect2: Connection success 修改 connect2.c 中的密码 123 为一个错误的密码,再测试会提示如下错误信息: Connection failed Connection error 1045: Access denied for user 'wcdj'@'localhost' (usig password: YES)

 

 

参考:

Linux 程序设计(第4版)第8章 P.283

 

版权声明:本文为博主原创文章,未经博主允许不得转载。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有