C++访问数据库

目录

一、主要流程

二、主要API分析

1.数据库连接与初始化

1.1 mysql_init函数

1.2 mysql_options函数

1.3 mysql_real_connect函数

2.数据库事务操作

2.1 mysql_autocommit函数

2.2 mysql_query函数

3.数据库查询结果处理

3.1 mysql_store_result函数

3.2 mysql_num_fields函数

3.3 mysql_fetch_fields函数

3.4 mysql_fetch_row函数

4.资源释放与关闭连接

4.1 mysql_free_result函数

4.2 mysql_close函数

三、完整代码


   

一、主要流程

  1. 初始化MySQL连接环境。
  2. 建立与本地MySQL数据库的连接。
  3. 关闭自动提交,执行相关数据操作并根据结果提交或回滚事务。
  4. 执行查询操作,获取结果集。
  5. 处理结果集的字段和数据行。
  6. 释放结果集资源并关闭数据库连接。

   

二、主要API分析

1.数据库连接与初始化

1.1 mysql_init函数

MYSQL *mysql_init(MYSQL *mysql);

若传入nullptr则创建新的MYSQL结构用于连接;若传入已有的MYSQL结构则对其进行初始化。

1.2 mysql_options函数

int mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg);

  • mysql:连接对象,操作的目标。
  • option:指定设置的选项类型。
  • arg:要设置的字符集。
1.3 mysql_real_connect函数

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:初始化后的MYSQL结构。
  • host:服务器地址。
  • user:用户名。
  • passwd:密码。
  • db:数据库名。
  • port:端口号。
  • unix_socket:Unix下套接字,可以为空。
  • client_flag:连接标志,默认为0。

  

2.数据库事务操作

2.1 mysql_autocommit函数

int mysql_autocommit(MYSQL *mysql, my_bool auto_mode);

  • mysql:连接对象。
  • auto_mode:0关闭自动提交,1开启自动提交。
2.2 mysql_query函数

int mysql_query(MYSQL *mysql, const char *q);

  • mysql:连接对象。
  • q:要执行的SQL语句字符串。

  

3.数据库查询结果处理

3.1 mysql_store_result函数

MYSQL_RES *mysql_store_result(MYSQL *mysql);

mysql:连接对象,从其获取结果。

3.2 mysql_num_fields函数

unsigned int mysql_num_fields(MYSQL_RES *result);

result:结果集结构指针,返回字段的数量。

3.3 mysql_fetch_fields函数

MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result);

result:结果集结构指针,返回字段信息的数组指针。

3.4 mysql_fetch_row函数

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

result:结果集结构指针,返回下一行数据指针或nullptr。


  

4.资源释放与关闭连接

4.1 mysql_free_result函数

void mysql_free_result(MYSQL_RES *result);

result:结果集结构指针,释放其占用内存。

4.2 mysql_close函数

void mysql_close(MYSQL *mysql);

mysql:连接对象指针,关闭连接释放资源。


  

三、完整代码

#include
#include
#include

using namespace std;


int main(void)
{
	MYSQL* mysql = mysql_init(nullptr);
	if (!mysql) {
		cerr << "Error init." << endl;
		return -1;
	}

	mysql = mysql_real_connect(mysql, "127.0.0.1", 
		"root", "root", "test01", 3306, nullptr, 0);
	if (!mysql) {
		cerr << "Error connect." << endl;
		return -1;
	}

	mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "gbk");

	mysql_autocommit(mysql, 0);
	int ret1 = mysql_query(mysql, "insert into t1 values(6, 'tom', '男', '4287')");
	int ret2 = mysql_query(mysql, "insert into t1 values(7, 'lucy', '女', '5471')");
	if (ret1 == 0 && ret2 == 0) {
		mysql_commit(mysql);
	}
	else {
		mysql_rollback(mysql);
	}

	int ret = mysql_query(mysql, "select * from t1");
	if (ret) {
		cerr << "Error query." << endl;
		return -1;
	}

	MYSQL_RES* res = mysql_store_result(mysql);
	if (!res) {
		cerr << "Error store." << endl;
		return -1;
	}

	int num = mysql_num_fields(res);

	MYSQL_FIELD* fields = mysql_fetch_fields(res);
	for (int i = 0; i < num; i++) {
		cout << left << setw(10) << fields[i].name;
	}
	cout << endl;
	
	MYSQL_ROW row;
	while (row = mysql_fetch_row(res)) {
		for (int i = 0; i < num; i++) {
			cout << left << setw(10) << row[i];
		}
		cout << endl;
	}

	mysql_free_result(res);

	mysql_close(mysql);

	return 0;
}

  

参考内容:

爱编程的大丙

  

你可能感兴趣的:(C++基础知识,c++,数据库,mysql)