【新手向】C++语言中对MySql数据库的增删查改简单操作

一.前言

在学习的过程中接触到了后台数据储存方面的问题,自学了数据库的一些粗浅运用,因为是初学而且我需要在C++的语言中对MySQL进行操作,所以在查找资料的时候花费了挺多的时间,希望这篇文章能帮到初学者们节省时间


二.MySQL基础知识

我初学MySQL是在DOS环境下学习的,本文章讲解的主要是通过C++ API的方式对MySQL进行操作,还是需要对DOS环境下的操作语句有一定的基础了解的,这里就不多赘述了。然后在了解了DOS环境后我使用的是Navicat这款数据库管理工具,用起来还是很方便的,大家可以去官网下载。


三.具体操作

1.连接数据库

在增删查改之前首先要连接数据库

bool ConnectDB()
{
	MYSQL* mysql = NULL;
	mysql = mysql_init(&m_mysql);
	if (!mysql) {
		errorIntoMySQL();//返回并打印错误信息函数
		return FALSE;
	}
	mysql_options(&m_mysql, MYSQL_SET_CHARSET_NAME, "gbk");//连接设置
	mysql = mysql_real_connect(&m_mysql, HOST, USER, PASSW, DBNAME, PORT, NULL, 0);
	//中间分别是主机,用户名,密码,数据库名,端口号(可以写默认0或者3306等),可以先写成参数再传进去
	if (mysql == NULL) {
		errorIntoMySQL();
		return FALSE;
	}
	cout<<"Database connected successful";//连接成功反馈
	return TRUE;
}

2.判断数据库是否存在,不存在则创建数据库,并打开

bool createDatabase(std::string& dbname) //传入数据库名字
{
	std::string queryStr = "create database if not exists ";
	queryStr += dbname;
	if (0 == mysql_query(&m_mysql, queryStr.c_str())) {
		queryStr = "use ";
		queryStr += dbname;
		if (0 == mysql_query(&m_mysql, queryStr.c_str())) {
			return true;
		}
	}
	errorIntoMySQL();
	return false;
}

3.增删查改操作

其实通过API操作MySQL就是使用mysql_query()来利用sql语句对数据库进行操作,所以我在之前说让大家可以熟悉一下DOS环境下的数据库操作就是因为这一点。

作为例子,我创建了这样的一个表
在这里插入图片描述

  • 写入数据

将sql语句整体放入一个string容器中更方便操作,但mysql_query()函数只能传入char* 型的数据,所以要利用str中的函数进行转换。

bool InsertDB(std::string m_name,std::string m_id,std::string m_num) 
{
	if (m_name.length() == 0) {
		cout<<"人名不能为空!"<<endl;
		return FALSE;
	}
	std::string str = "insert into "+ this->Tablename +" values('" + m_name + "','" + "m_id" + "','" + "m_num" + "');";
	if (mysql_query(&m_mysql, str.c_str())) {
		errorIntoMySQL();
		return FALSE;
	}
	return TRUE;
}
  • 删除数据

都是相同的方法,就不再过多赘述了。

bool DeleteDB(std::string m_name) {
	if (m_name.length() == 0) {
		cout<<"人名不能为空!"<<endl;
		return FALSE;
	}
	std::string query = "delete from `"+this->Tablename+"` where name = '" + m_name + "';";
	if (mysql_query(&m_mysql, query.c_str())) {
		errorIntoMySQL();
		return FALSE;
	}
	return TRUE;
}
  • 查询数据

查询数据稍微要麻烦一点,关键在于将数据表中的数据导出并储存起来,这里我用的是嵌套的vector容器。

bool getDatafromDB(std::vector<std::vector<std::string> >& data) 
{
	std::string queryStr = "select * from `per`;";
	if (0 != mysql_query(&m_mysql, queryStr.c_str())) {
		errorIntoMySQL();
		return false;
	}
	result = mysql_store_result(&m_mysql);//获得数据库结果集
	int row = mysql_num_rows(result);//获得结果集中的行数
	int field = mysql_num_fields(result);//获得结果集中的列数

	MYSQL_ROW line = NULL;
	line = mysql_fetch_row(result);
	std::string temp;
	while (NULL != line) {
		std::vector<std::string> linedata;
		for (int i = 0; i < field; i++) {//获取每一行的内容
			if (line[i]) {
				temp = line[i];
				linedata.push_back(temp);
			}
			else {
				temp = "NULL";
				linedata.push_back(temp);
			}
		}
		line = mysql_fetch_row(result);
		data.push_back(linedata);
	}
	return true;
}
  • 修改数据

修改数据时你可以根据自己的需要利用函数重载来更改条件。

bool DeleteDB(std::string m_name) {//这里不一定要是名字,可以是你想要修改的其他数据
	std::string query = "update per set num='123456780' where name='"+m_name+"'";
	if (mysql_query(&m_mysql, query.c_str())) {
		errorIntoMySQL();
		return FALSE;
	}
	return TRUE;
}

四.结语

如果只是刚接触数据库的话,可以先抄一抄代码,用一次后很多地方你就会懂了,上面的代码改一下数据都是可以直接用的,有问题欢迎随时指出哦。

  • 14
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,下面是使用ODBC在C++连接SQL Server数据库并进行增删查改操作的基本步骤: 1. 引入头文件:您需要在代码引入以下头文件: ``` #include <windows.h> #include <sql.h> #include <sqlext.h> ``` 2. 连接到数据库:使用ODBC API连接到SQL Server数据库,例如: ``` SQLHANDLE henv, hdbc; SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); char* dsn = "your_dsn"; char* user = "your_username"; char* pass = "your_password"; SQLConnect(hdbc, (SQLCHAR*)dsn, SQL_NTS, (SQLCHAR*)user, SQL_NTS, (SQLCHAR*)pass, SQL_NTS); ``` 在这个例子,我们使用SQLAllocHandle函数分配了环境句柄和连接句柄,然后使用SQLSetEnvAttr函数设置ODBC版本,最后使用SQLConnect函数连接到数据库。 3. 执行SQL语句:使用ODBC API执行SQL语句,例如: ``` char* sql = "SELECT * FROM table_name"; SQLHANDLE hstmt; SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); SQLExecDirect(hstmt, (SQLCHAR*)sql, SQL_NTS); ``` 在这个例子,我们使用SQLAllocHandle函数分配了语句句柄,然后使用SQLExecDirect函数执行SQL语句。 4. 处理结果集:如果您执行的SQL语句返回一个结果集,您需要使用ODBC API来处理该结果集,例如: ``` while (SQLFetch(hstmt) == SQL_SUCCESS) { int id, value; SQLGetData(hstmt, 1, SQL_C_LONG, &id, 0, NULL); SQLGetData(hstmt, 2, SQL_C_LONG, &value, 0, NULL); // 处理结果 } ``` 在这个例子,我们使用SQLFetch函数获取结果集的行,然后使用SQLGetData函数获取每个行的列的数据。 5. 实现增删查改:您可以将上述步骤组合起来,实现一个简单增删查改功能,例如: ``` // 查询数据 char* sql = "SELECT * FROM table_name WHERE id = ?"; SQLHANDLE hstmt; SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); SQLPrepare(hstmt, (SQLCHAR*)sql, SQL_NTS); int id = 1; SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &id, 0, NULL); SQLExecute(hstmt); int value; if (SQLFetch(hstmt) == SQL_SUCCESS) { SQLGetData(hstmt, 2, SQL_C_LONG, &value, 0, NULL); } // 插入数据 sql = "INSERT INTO table_name (id, value) VALUES (?, ?)"; SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); SQLPrepare(hstmt, (SQLCHAR*)sql, SQL_NTS); id = 2; value = 10; SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &id, 0, NULL); SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &value, 0, NULL); SQLExecute(hstmt); // 更新数据 sql = "UPDATE table_name SET value = ? WHERE id = ?"; SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); SQLPrepare(hstmt, (SQLCHAR*)sql, SQL_NTS); value = 20; id = 2; SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &value, 0, NULL); SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &id, 0, NULL); SQLExecute(hstmt); // 删除数据 sql = "DELETE FROM table_name WHERE id = ?"; SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); SQLPrepare(hstmt, (SQLCHAR*)sql, SQL_NTS); id = 2; SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &id, 0, NULL); SQLExecute(hstmt); ``` 在这个例子,我们使用了一个SELECT语句来查找需要操作的数据,然后使用INSERT、UPDATE和DELETE语句进行了相应的操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值