#include<mysql.h>
//用于链接libmysql.lib库的宏,这样就不需要在VS里面去配置链接器了
#pragma comment(lib, "libmysql.lib")
class MySqlAPI{
private:
//数据库配置信息
const char* host = "127.0.0.1";//mysql所在IP地址
const char* user = "root";//Mysql账户名称
const char* password = "root";//对应账户的密码
const char* dbName = "mydatabase";//数据库名称
public:
void API
{
//相当于和mysql之间的连接,增删改查都需要它
MYSQL mysql;
//初始化一下mysql的环境
mysql_init(&mysql);
//连接mysql,如果有错误就返回0
if (!mysql_real_connect(&mysql, host, user, password, dbName, 3306, 0, 0)) {
std::cout << "数据库 " << dbName << " 连接失败\n";
}
/******************查*****************/
//1.固定的参数sql语句(字符串必须使用单引号括起来,否则运行就出错)
char sql[] = "select * from account where id='120'";
//2.动态传递参数的sql 使用的sprintf函数填补参数的空白
char sqlFmt[] = "select * from account where id='%s'";
char sql2[1024];
sprintf(sql2, sqlFmt, "aaa");
//执行一次数据库的sql语句,如果返回1就证明有错误
//ps:sql语句必须是char*的字符串,所以如果使用的string,运行就会出错
//解决办法就是:string str="select...."; str.c_str();//c_str():把string转为char*的字符串D
if (mysql_query(&mysql, sql2)) {
//mysql_errno返回mysql报错的错误编号 mysql_error返回具体的报错信息
cout << "sql语句错误:" << mysql_errno(&mysql) << mysql_error(&mysql) << endl;
}
MYSQL_RES* result = mysql_store_result(&mysql);
MYSQL_ROW row;//对应mysql表格中的一行信息
//依次读取存放在MYSQL_RES里的每一行数据
while (row = mysql_fetch_row(result)) {
//这里只是一个举例,可以通过索引的形式取得
//一行sql数据中的每一个数据(下标的顺序是和定义mysql数据表的属性对应的)
//返回的都是字符长串类型的
//可以通过atoi(row[0])或atof(row[0])转换为int型或double型
cout << row[0] << row[1];//....
}
mysql_free_result(result);//释放sql结果的资源
/******************删、改、查************************/
//删改查的函数都是一样的:1.创建sql语句,2.放入query函数执行(char*类型)
//3.检查是否报错 或者说查询也是一样的套路,只是最后要通过MYSQL_RES与MYSQL_ROW获取查询结果数据
char sql3[] = "*****";
if (mysql_query(&mysql, sql3)) {
cout << "sql语句错误:" << mysql_error(&mysql) << endl;
}
/**********************执行事务********************************/
string sql="begin";//开始事务
mysql_query(&mysql,sql.c_str());
char sqlFmt[]="insert into account values('%s','%s')";
char sql4[1024];
for(int i=0,i<100;++i){
sprintf(sql4,sqlFmt,to_string(i).c_str(),to_string(i).c_str());
if(mysql_query(&mysql,sql4)){
cout<<"插入数据异常:"<<mysql_error()<<endl;
//事务提交出错 进行回滚,撤销前面的提交
if (mysql_query(&mysql, "rollback")) {
cout << "回滚失败:" << mysql_error(&mysql) << endl;
}
}
}
mysql_query(&mysql,"commit");//提交事务
/***********************************************************/
mysql_close(&mysql);//关闭数据库连接
}
}
C++的Mysql常用API
最新推荐文章于 2023-12-20 09:45:03 发布