connector/c++ 远程连接mysql 数据库
官方参考文档mysql:https://dev.mysql.com/doc/connector-cpp/8.0/en/connector-cpp-apps-windows-notes.html
connector/c++ 分为release版本和debug版本,如果使用debug模式,而下载的是release模式库文件,那么编译就会出现内存不够的问题。请选择正确的驱动包;
运行环境:vs2022,mysql5.7.41 ,connector/c++ 8.0.32(mysql安装在linux虚拟机中);
1、下载选择对应版本
下载完成后的目录结构:
2、配置属性
项目名称右击选择属性:
配置属性 -> C/C++ -> 常规 -> 附加包含目录 -> include文件夹
配置属性 -> 连接器 -> 常规 -> 附加库目录 ->
debug模式: LIB/vs14/debug,如果是x64的话,目录结构是 lib64/vs14/debug
release模式: LIB/vs14
配置属性 -> 连接器 -> 输入 -> 附加依赖项 ->
传统jdbc链接:添加mysqlcppconn.lib;
X DevAPI链接:添加mysqlcppconn8.lib;
配置属性->调试->环境->PATH=C:\mysql\mysql-connector-c+±8.0.32-winx64-debug\lib64;
PATH=和末尾的分号不能缺少,这个目录是 libssl-1_1-x64.dll 和libcrypto-1_1-x64.dll文件存在的目录
3、连接数据库
参照mysql官方文档
sql::mysql::MySQL_Driver* driver;//载入驱动
sql::Connection* con;//链接数据库
sql::Statement* stmt;//数据库语句
sql::ResultSet* res;//查询结果
driver = sql::mysql::get_mysql_driver_instance();
con = driver->connect("mysql主机ip:3306", "用户名", "密码");//例如connect("192.168.12.1:3306", "root", "root")
stmt = con->createStatement();
stmt->execute("use 数据库名");
res = stmt->executeQuery("select * from student");
4、读取和写入中文字符串出现乱码
原因是控制台默认使用操作系统的编码gbk、与mysql中存储的数据编码不一致;
查看mysql编码:
use 数据库名;
show create table 表名;
默认建表时是UTF8编码;
stmt->execute("set names gbk");
/**相当于执行了下面三条命令语句:
mysql> SET character_set_client = gbk; 标记客户端传输来的数据为gbk编码
mysql> SET character_set_results = gbk; 标记返回客户端的数据为gbk
mysql> SET character_set_connection = gbk; 数据库收到客户端的语句后,要转换到gbk
**/
注意:在执行完这条命令后在当前连接内有效,重新连接后需要再次设置,每个连接的编码是相互独立的,所以此时在mysql的控制台查询依然是utf8编码,只有在vs的控制台打印才是gbk编码,不要误认为没有设置成功;
stmt->execute("set names gbk");
res = stmt->executeQuery("Show variables like 'character%'");
while (res->next())
{
cout << res->getString("Variable_name")<<"=" << res->getString("Value") << endl;
}
结果如下图:
此时的mysql控制台结果如下:
不同mysql链接之间互相独立
参照自己程序中使用的编码格式,设置正确后不会再乱码!