C++如何连接并使用MySQL数据库
C++如何连接并使用MySQL数据库
在C++中连接和使用MySQL数据库非常方便,只需要使用MySQL提供的API函数即可。下面将介绍如何在C++中连接和使用MySQL数据库。
一、新建C++工程项目
首先在VS里新建C++工程项目,右键工程项目名,选择属性。选择平台选择选择配置管理器选择新建下拉菜单中选择X64。确定选择C/C++->常规->附加包含目录,添加C:\Program Files\MySQL\MySQL Server 5.5\include(根据自己的安装目录选择)选择连接器->常规->附加库目录。添加C:\Program Files\MySQL\MySQL Server 5.5\lib;(根据自己的安装目录选择)选择连接器->输入->附加依赖项。添加C:\Program Files\MySQL\MySQL Server 5.5\lib\libmysql.lib;(根据自己的安装目录选择)最后将动态链接库libmysql.dll复制到工程的X64生成目录下。该动态连接库文件在C:\Program Files\MySQL\MySQL Server 5.5\lib\目录下。
二、MySQL常用API函数
实际上,在C++中使用MySQL数据库,最主要的就是对于MySQL API函数的理解和掌握。下面是一些常用的MySQL API函数:
1. mysql_affected_rows():返回被最新的UPDATE、DELETE或INSERT查询影响的行数。
2. mysql_close():关闭一个服务器连接。
3. mysql_connect():连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。
4. mysql_change_user():改变在一个打开的连接上的用户和数据库。
5. mysql_create_db():创建一个数据库。该函数不推荐;而使用SQL命令CREATE DATABASE。
6. mysql_data_seek():在一个查询结果集合中搜寻一任意行。
7. mysql_debug():用给定字符串做一个DBUG_PUSH。
8. mysql_drop_db():抛弃一个数据库。该函数不推荐;而使用SQL命令DROP DATABASE。
9. mysql_dump_debug_info():让服务器将调试信息写入日志文件。
10. mysql_eof():确定是否已经读到一个结果集合的最后一行。这功能被反对;mysql_errno()或mysql_error()可以相反被使用。
11. mysql_errno():返回最近被调用的MySQL函数的出错编号。
12. mysql_error():返回最近被调用的MySQL函数的出错消息。
13. mysql_escape_string():用在SQL语句中的字符串的转义特殊字符。
14. mysql_fetch_field():返回下一个表字段的类型。
15. mysql_fetch_field_direct():返回一个表字段的类型,给出一个字段编号。
16. mysql_fetch_fields():返回一个所有字段结构的数组。
17. mysql_fetch_lengths():返回当前行中所有列的长度。
18. mysql_fetch_row():从结果集合中取得下一行。
19. mysql_field_seek():把列光标放在一个指定的列上。
20. mysql_field_count():返回最近查询的结果列的数量。
21. mysql_field_tell():返回用于最后一个mysql_fetch_field()的字段光标的位置。
22. mysql_free_result():释放一个结果集合使用的内存。
23. mysql_get_client_info():返回客户版本信息。
24. mysql_get_host_info():返回一个描述连接的字符串。
25. mysql_get_proto_info():返回连接使用的协议版本。
26. mysql_get_server_info():返回服务器版本号。
27. mysql_info():返回关于最近执行得查询的信息。
28. mysql_init():获得或初始化一个MYSQL结构。
29. mysql_insert_id():返回有前一个查询为一个AUTO_INCREMENT列生成的ID。
30. mysql_kill():杀死一个给定的线程。
31. mysql_list_dbs():返回匹配一个简单的正则表达式的数据库名。
32. mysql_list_fields():返回匹配一个简单的正则表达式的列名。
33. mysql_list_processes():返回当前服务器线程的一张表。
34. mysql_list_tables():返回匹配一个简单的正则表达式的表名。
35. mysql_num_fields():返回一个结果集合重的列的数量。
36. mysql_num_rows():返回一个结果集合中的行的数量。
37. mysql_options():设置对mysql_connect()的连接选项。
38. mysql_ping():检查对服务器的连接是否正在工作,必要时重新连接。
39. mysql_query():执行指定为一个空结尾的字符串的SQL查询。
40. mysql_real_connect():连接一个MySQL服务器。
41. mysql_real_query():执行指定为带计数的字符串的SQL查询。
42. mysql_reload():告诉服务器重装授权表。
43. mysql_row_seek():搜索在结果集合中的行,使用从mysql_row_tell()返回的值。
44. mysql_row_tell():返回行光标位置。
45. mysql_select_db():连接一个数据库。
46. mysql_shutdown():关掉数据库服务器。
47. mysql_stat():返回作为字符串的服务器状态。
48. mysql_store_result():检索一个完整的结果集合给客户。
49. mysql_thread_id():返回当前线程的ID。
50. mysql_use_result():初始化一个一行一行地结果集合的检索。
三、使用MySQL数据库示例程序
下面是一个C++使用MySQL数据库的示例程序,可以用于参考:
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
using namespace std;
#pragma comment(lib,"libmysql.lib")
#pragma comment(lib,"wsock32.lib")
MYSQL * mysql = new MYSQL;//mysql连接
MYSQL_FIELD * fd;//字段列数组
char field[32][32];//存字段名二维数组
MYSQL_RES * res;//这个结构代表返回行的一个查询结果集
MYSQL_ROW column;//一个行数据的类型安全(type-safe)的表示,表示数据行的列
char query[150];//查询语句
bool ConnectDatabase();
bool QueryDatabase1();
bool QueryDatabase2();
int main()
{
ConnectDatabase();
QueryDatabase1();
QueryDatabase2();
system("pause");
return 0;
}
bool ConnectDatabase()
{
//初始化mysql
mysql_init(mysql);
//返回false则连接失败,返回true则连接成功
if (!(mysql_real_connect(mysql, "localhost", "root", "123456", "company", 0, NULL, 0)))//中间分别是主机,用户名,密码,数据库名,端口号(可以写默认0或者3306等),可以先写成参数再传进去
{
printf("Error connecting to database:%s\n", mysql_error(mysql));
return false;
}
else
{
printf("Connected...\n");
return true;
}
return true;
}
bool QueryDatabase1()
{
sprintf_s(query, "select * from t_dept");//执行查询语句,这里是查询所有,user是表名,不用加引号,用strcpy也可以
mysql_query(mysql, "set names gbk");//设置编码格式(SET NAMES GBK也行),否则cmd下中文乱码
//返回0查询成功,返回1查询失败
if (mysql_query(mysql, query))//执行SQL语句
{
printf("Query failed(%s)\n", mysql_error(mysql));
return false;
}
else
{
printf("query success\n");
}
//获取结果集
if (!(res = mysql_store_result(mysql)))//获得sql语句结束后返回的结果集
{
printf("Couldn't get result from %s\n", mysql_error(mysql));
return false;
}
//打印数据行数
printf("number of data line returned:%d\n", mysql_affected_rows(mysql));
//获取字段的信息
char* str_field[32];//定义一个字符串数组存储字段信息
for (int i = 0; i name;
}
for (int i = 0; i < 4; i++)//打印字段
printf("%10s\t", str_field[i]);
printf("\n");
//打印获取的数据
while (column = mysql_fetch_row(res))//在已知字段数量情况下,获取并打印下一行
{
printf("%10s\t%10s\t%10s\t%10s\n", column[0], column[1], column[2], column[3]);//column是列数组
}
return true;
}
需要注意的是,程序运行前需要先连接数据库。程序中定义了

-
MySQL Workbench怎么建立数据库(附:sql语句创建数据库方法) 2023-07-20 12:22:29
-
MySQL Workbench是什么?(附:如何设置中文教程) 2023-07-20 11:42:31
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
delete和drop的区别是什么 2023-05-14 07:00:02