定义MySQLCon类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class MySQLCon { MYSQL mysql; public : int errornum; string errortext; public : //初始化 MySQLCon(); //关闭数据库 ~MySQLCon(); //链接数据库 bool OpenConn( const char * host, const char * username, const char * pwd, const char * dbName,unsigned port=0); void GetErrorText(); //获取错误文本 void Close(); //关闭数据库 bool ExecuteSQL( const char * sql); //使用SQL语句,无法接收数据 bool QureySQL( const char * sql, vector<vector<string>>& resultSet); //使用SQL语句并接收数据(select语句) }; |
初始化操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
MySQLCon::MySQLCon() { if (mysql_library_init(0, nullptr, nullptr)) { cout << "CAPI初始化失败" << std::endl; getchar (); exit (1); } if (mysql_init(&mysql)==nullptr) { cout << "初始化数据库变量失败" << std::endl; getchar (); exit (1); } if (mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk" )) { cout << "设置连接选项失败" << std::endl; getchar (); exit (1); } } |
连接到MySQL服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//参数分别为主机,用户名,密码,数据库名,端口号 bool MySQLCon::OpenConn( const char * host, const char * username, const char * pwd, const char * dbName, unsigned port) { //连接数据库 if (mysql_real_connect(&mysql, host, username, pwd, dbName, port, nullptr, 0)==nullptr) { cout << "连接到MySQL服务器失败" << std::endl; //获取错误文本 GetErrorText(); exit (1); return false ; } return true ; } |
获取MySQL错误信息
1
2
3
4
5
6
7
8
9
10
11
12
|
void MySQLCon::GetErrorText() { //获取错误代码 errornum = mysql_errno(&mysql); //获取错误文本 errortext = mysql_error(&mysql); //打印错误代码 cout << "error num: " << errornum << std::endl; //打印错误文本 cout << "error text: " << errortext << std::endl; getchar (); } |
C++中使用SQL语句
1
2
3
4
5
6
7
8
9
10
|
bool MySQLCon::ExecuteSQL( const char * sql) { //使用SQL语句但无法接收数据 if (mysql_real_query(&mysql, sql, strlen (sql))) { GetErrorText(); return false ; } return true ; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
bool MySQLCon::QureySQL( const char * sql, vector<vector<string>>& resultSet) { //使用SQL语句并接收数据至vector容器 if (mysql_real_query(&mysql, sql, strlen (sql))) { GetErrorText(); return false ; } //创建一个MYSQL结果集 MYSQL_RES* result = mysql_store_result(&mysql); //获取行和列的总数 unsigned int rows = mysql_num_rows(result); unsigned int cols = mysql_num_fields(result); //用于记录结果集中的一条数据 MYSQL_ROW row; while (row = mysql_fetch_row(result)) { //创建一个vector容器用于储存row中的数据 vector<string> lineDate; for ( int i = 0; i < cols; i++) { if (row[i]) { //将row中每一列的数据存入lineDate中 lineDate.push_back(row[i]); } else { lineDate.push_back( "" ); } } //在resultSet中存入整行数据 resultSet.push_back(lineDate); } //释放结果集 mysql_free_result(result); return true ; } |
关闭数据库
1
2
3
4
5
6
7
8
9
|
void MySQLCon::Close() { mysql_close(&mysql); } MySQLCon::~MySQLCon() { Close(); mysql_library_end(); } |
示例主函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
int main() { MySQLCon c_apiconn; c_apiconn.OpenConn( "127.0.0.1" , "root" , "136119" , "fancy" ); string sql = "use fancy;" ; vector<vector<string>> data; c_apiconn.ExecuteSQL(sql.c_str()); sql = "select * from fancy.info;" ; c_apiconn.QureySQL(sql.c_str(), data); for ( int i = 0; i < data.size(); i++) { for ( int j = 0; j < data[i].size(); j++) { cout << data[i][j] << "\t" ; } cout << endl; } return 0; } |
输出内容
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/cosfancy/article/details/107610117