在Linux下写C或C++程序要使用MySQL数据库,可以调用MySQL的C API,主要就是用几个函数完成数据库初始化、连接、执行SQL语句,比较方便简单。但这东西一直不用也容易忘,所以这里记录一个Linux环境下写的C++程序调用MySQL的C语言API的例程。
先创建如下数据表:
使用MySQL的C API进行查询的代码示例:
#include <iostream>
#include <string>
//要调用API记得带上头文件
#include <mysql/mysql.h>
using namespace std;
int main()
{
//要用到的对象
MYSQL *mysql = NULL;//和MySQL交互要有个MySQL对象(相当于句柄?)
MYSQL_RES* res;//SQL执行结果
MYSQL_ROW row;//保存行数据
unsigned int num_fields;//保存列数
//初始化数据库
mysql = mysql_init(mysql);
if (mysql == NULL)
{
cout << "Init Error:" << mysql_error(mysql);
return 1;
}
//连接到数据库
//这几个参数依次为MySQL对象、主机名或IP地址(写“localhost”表示与本地主机连接)、用户名、
//密码、数据库名、端口号,后面两个没什么意外就写NULL,0就行了
mysql = mysql_real_connect(mysql,"localhost","用户名",
"密码","数据库名",3306,NULL,0);
if (mysql == NULL)
{
cout << "Connect Error:" << mysql_error(mysql);
return 1;
}
else
{
cout << "connected" << endl;
}
//查询数据
string SQL = "select * from testtable";//SQL语句
const char* Query = SQL.c_str();
if(mysql_query(mysql,Query))//第二个貌似只接受const char*类型
{
cout << "Select Error" << mysql_error(mysql);
}
else
{
cout << "Select success" << endl;
res = mysql_store_result(mysql);//获取结果
num_fields = mysql_num_fields(res);//获取结果列数
while((row=mysql_fetch_row(res))!=NULL)//逐行读取
{
for(int i = 0; i < num_fields; ++i){
string tmp =row[i];
cout << tmp << ' ';
}
cout << endl;
}
mysql_free_result(res); //释放内存
}
mysql_close(mysql);
return 0;
}
注意编译的时候带上-lmysqlclient
程序运行结果: