qidao123.com技术社区-IT企服评测·应用市场
标题:
【MySQL数据库】C/C++毗连数据库
[打印本页]
作者:
知者何南
时间:
前天 11:29
标题:
【MySQL数据库】C/C++毗连数据库
MySQL要想在C/C++下使用,就必须要有 MySQL 提供的头文件和相关的库。
在Ubuntu系统上,使用
apt install mysql-server
安装MySQL服务器后,仅安装了MySQL数据库服务自己,并没有安装MySQL开发所需的库和头文件。因此,在实验用C/C++编写访问MySQL数据库的应用程序时,编译器找不到相应的MySQL头文件(如)和相关的库,导致无法正常编译。
使用C/C++访问数据库时,需要安装MySQL提供的开发包,这些包包含了进行MySQL开发所需的头文件和库文件。Ubuntu系统下安装的MySQL服务,可以使用以下指令安装MySQL开发库。
sudo apt install default-libmysqlclient-dev
注意:MySQL开发库的版本要与MySQL服务器同等,否则某些环境下会出现不兼容问题。
在Ubuntu系统下安装好MySQL后,头文件在
/usr/include/mysql
路径下(/usr/include是系统搜索头文件的默认路径),库文件在
/usr/lib/x86_64-linux-gnu/
路径下(系统链接库时默认的查找路径)。
下面通过
mysql_get_client_info()
函数,来验证我们的引入是否乐成。
#include <cstdio>
#include <mysql/mysql.h>
int main()
{
printf("mysql client Version: %s\n", mysql_get_client_info());
return 0;
}
// 下面指令天生失败,因为没有链接MySQL库
zhu@iv-ydi2mepybkcva4ghjhmx:~/mysql$ g++ test.cc -o test
// 链接MySQL库,乐成天生
zhu@iv-ydi2mepybkcva4ghjhmx:~/mysql$ g++ test.cc -o test -lmysqlclient
C/C++对应MySQL的接口和使用流程请观看此文章:MySQL操纵函数接口。
MySQL通用接口:
初始化一个MYSQL毗连的实例对象。
MYSQL * mysql_init(MYSQL *mysql);
毗连MySQL服务器。
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 client_flag);
用于向 MySQL 服务器发送 SQL 语句并执行它。
int mysql_query(MYSQL *mysql, const char *stmt_str);
获取MySQL结果:
mysql_store_result是从 MySQL 服务器获取查询结果集的一个函数。当执行了一个select 查询或其他会产生结果集的查询(如show)后,可以使用该函数来将整个结果集一次性加载到客户端内存中。
MYSQL_RES *mysql_store_result(MYSQL *mysql);
mysql_store_result 获取结果集后,下面就是读取获取结果会合的数据。
获取结果行数:my_ulonglong mysql_num_rows(MYSQL_RES *res);
获取结果列数:unsigned int mysql_num_fields(MYSQL_RES *res);
获取结果会合每个列的属性信息:
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);
获取结果会合的数据:MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
阐明:my_ulonglong实在就是int64_t;
MYSQL_FIELD是一个布局体,mysql_fetch_fields现实返回的就是布局体数 组,数组的每个元素对应一个列的属性信息;
MYSQL_ROW实在就是char**,可以当成一个二维数组来用,每一列对应数组中 的一个元素
注意:
1,创建好链接之后,获取英文没有问题,如果获取中文是乱码,那么阐明设置链接的字符集与数据库不匹配。这里需要运用 mysql_set_character_set 修改字符集。
mysql_set_character_set(myfd, "utf8"); myfd使用utf8字符集,原始默认是latin1
2,mysql_store_result函数存储结果集时,内部malloc了一片内存空间来存储查询过来的数据,执行完毕后,需要 void mysql_free_result(MYSQL_RES *result) 函数来释放资源。
代码实例请在此链接下观看:C++代码运用MySQL
下面来阐明下
show processlist
命令。
show processlist
是 MySQL 中用于表现当前全部毗连到 MySQL 服务器的毗连(即线程)以及其状态的命令。每个毗连在 MySQL 中都表示为一个线程。该指令提供了查看这些线程详细信息的方法。输出字段阐明如下:
Id:
每个线程的唯一标识符。
User:
发起该线程的用户名。
Host:
发起该线程的客户端主机名或IP地址(以及端标语)。如果通过TCP/IP毗连,格式通常是:[hostname]:[port];如果是当地毗连,则可能是localhost。
db:
当前线程正在使用的数据库名称。如果没有选择任何数据库,则此列为NULL。
Command:
线程正在执行的操纵类型。例如,sleep表示线程处于空闲等待状态;query表示线程正在执行查询。
Time:
线程处于其当前状态的时间,以秒为单元。
State:
线程的状态,提供了关于线程当前活动的更详细的信息。不同的命令可能有不同的状态。
Info:
正在执行的SQL语句文本。如果线程没有执行任何语句,则此列为NULL。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4