目录
- 一.前言
- 二.MySQL基础知识
- 三.具体操作
- 1.连接数据库
- 2.判断数据库是否存在,不存在则创建数据库,并打开
- 3.增删查改操作
- 四.结语
一.前言
在学习的过程中接触到了后台数据储存方面的问题,自学了数据库的一些粗浅运用,因为是初学而且我需要在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;
}
四.结语
如果只是刚接触数据库的话,可以先抄一抄代码,用一次后很多地方你就会懂了,上面的代码改一下数据都是可以直接用的,有问题欢迎随时指出哦。
更多推荐
【新手向】C++语言中对MySql数据库的增删查改简单操作
发布评论