来源:自学PHP网 时间:2015-04-16 10:51 作者: 阅读:次
[导读] Linux 下 C 43; 43; C 连接 MySQL 数据库(一)一、连接前准备原材料:Ubuntu12 04LTS (已经安装了MySQL5 5或者更高级版本,新立得软件包,gcc g 43; 43;或者CodeBlosks编译器) 安...
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选项。如: g++ -lmysqlclient mysql_test.cc -o mysqltest 2、如果选用的是CodeBlocks,则需在构建选项中,将连接库设为mysqlclient。 开始编译。 二、头文件及相关函数分析这篇博客中所列的函数全部包含在头文件<mysql/mysql.h>下,因此,需要在程序编写开始处,加入一行: #include <mysql/mysql.h> 1、用CAPI连接MySQL数据库有两个步骤: 1)初始化一个连接句柄 2)建立连接 所用到的函数如下: 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的连接进行释放 void mysql_close(MYSQL *connection); //关闭连接 //参数connection被清空,指针变为无效 3、mysql_options用于设置额外选项,并影响连接行为,但是它只能在mysql_init和mysql_real_connect之间调用 int mysql_options(MYSQL *connection, enum mysql_option option, const char *argument); //设置连接选项 option的值为下列四个值之一: MYSQL_INIT_COMMAND //连接到MySQL服务器时将执行的命令,再次连接时将自动再次执行。 MYSQL_OPT_CONNECT_TIMEOUT //连接超时前的等待秒数 MYSQL_OPT_COMPRESS //网络连接中使用压缩机制 MYSQL_OPT_PROTOCOL //要使用的协议类型,影视mysql.h中定义的mysql_protocol_type枚举值之一 4、以上的函数是在假设没有错误的情况下运行,如果数据库连接过程中出现了错误,我们就需要以下两个函数来处理错误信息: unsigned int mysql_errno(MYSQL *connection); //返回错误代码(0表示为出现错误) char *mysql_error(MYSQL *connection); //返回错误信息,是以NULL作为终结的字符串 5、程序访问数据库不只是与数据库建立连接,更重要的是通过SQL语句的执行查询或改变数据库中数据。执行SQL语句可以通过下列函数实现。 int mysql_query(MYSQL *connection, const char *query); SQL语句分为两类,返回数据的SQL和不返回数据的SQL(UPDATE、DELETE、INSERT)。 下面我们只介绍不返回数据的SQL my_ulonglong mysql_affected_rows(MYSQL *connection); //返回查询受影响的行 //对一段SQL语句执行后可以通过调用此函数查看SQL语句执行后,数据库中数据状态改变的行数,以此判断SQL的执行成功与否。 三、实例#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); } } |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com