数据库----C/C++连接
·
这里写目录标题
1. 初始化数据库
1. 要使用库,必须先进行初始化!
MYSQL *mfp = mysql_init(NULL);
2. 连接数据库
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long clientflag);
1. 第一个参数 MYSQL是 C api中一个非常重要的变量
(mysql_init的返回值),里面内存非常丰富,
有port,dbname,charset等连接基本参数
它也包含了一个叫 st_mysql_methods的结构体变量,该变量
里面保存着很多函数指针,
这些函数指针将会在数据库连接成功以后的各种数据操作中被调用
3. 下发mysql命令
int mysql_query(MYSQL *mysql, const char *q);
建立好链接之后,获取英文没有问题,如果获取中文是乱码:
设置链接的默认字符集是utf8,原始默认是latin1
mysql_set_character_set(myfd, “utf8”);
//建立好链接之后,获取英文没有问题,如果获取中文是乱码:
//设置链接的默认字符集是utf8,原始默认是latin1
mysql_set_character_set(myfd, “utf8”);
在centos 7下,会出现这种问题,unbuntu mysql8.0版本及以上都是不需要的
#include <stdio.h>
#include <mysql/mysql.h>
#include <iostream>
using namespace std;
const char *host = "127.0.0.1";
const char *user = "xaq";
const char *passwd = "200563yy";
const char *db = "xaq";
const int port = 3306;
int main()
{
MYSQL *mi = mysql_init(nullptr); // 初始化数据库
if (mi == nullptr)
{
return 1;
}
cout << "init success" << endl;
MYSQL *mc = mysql_real_connect(mi, host, user, passwd, db, port, nullptr, 0);
if (mc == nullptr)
{
return 2;
}
cout << "connect success" << endl;
const char *insert = "insert into navicat values(3,'李白')";
const char *update = "update navicat set name='libai' where id=3";
const char *select = "select * from navicat";
int n = mysql_query(mc, select);
if (n == 0)
{
cout << select << " " << "success !" << endl;
}
MYSQL_RES *res = mysql_store_result(mc); // 把select执行后的内容放入,二级指针
if (res == nullptr)
{
return 3;
}
cout << "store success" << endl;
int row = mysql_num_rows(res); // 获取结果行数mysql_num_rows
cout << row << endl;
int fields = mysql_num_fields(res);//获取列数
cout << fields << endl;
MYSQL_FIELD *fields_name = mysql_fetch_fields(res);//获取列名
if (fields_name == nullptr)
{
return 4;
}
for (int i = 0; i < fields; i++)//遍历列
{
cout << fields_name[i].name << "\t";//获取每一列的名字
}
cout << endl;
MYSQL_ROW line;
for (int i = 0; i < row; i++)
{
line = mysql_fetch_row(res);//获取行数,得到二级指针指向行
int j = 0;
for (; j < fields; j++)//列
{
cout << line[j] << "\t";//相当于解引用,遍历行数
}
cout << endl;
}
mysql_free_result(res);//释放到申请的res空间(malloc,new)
mysql_close(mc);//关闭连接
return 0;
}
// int main()
// {
// printf("mysql client Version: %s\n", mysql_get_client_info());
// return 0;
// }
更多推荐


所有评论(0)