admin管理员组文章数量:1794759
使用C++实现MySQL数据库编程
1.使用C++访问MySQL数据库
使用到的软件:
编译器:Visual Studio 2019
数据库软件:MySQL 8.0
第一步:打开MySQL的安装目录,默认的安装路径为:C:\\Program Files\\MySQL\\MySQL Server 8.0,查看其中是否有lib和include目录,如果没有可能是安装不完全,建议重新安装MySQL。
第二步:使用VS2019创建一个新的工程,右击工程名,点击属性,
点击C/C++目录下的常规,将include目录复制粘贴至附加包含目录下。(VS2015之后可能会出现刚创建的项目中没有C/C++选项,这时只要写一些代码编译一下就会出现)
点击链接器下的常规,将lib目录粘贴至附加库目录下。
点击链接器下的输入,在附加依赖项添加libmysql.lib。
点击配置下的高级,将bin文件夹目录复制到环境下(注意在前面加上PATH=,以及最后的分号是英文符号)。最后点击应用。
然后将lib目录下的libmysql.ddl文件复制到与项目工程源文件相同的目录下
最后将项目的运行平台修改为×64。
至此在VS2019中使用C++访问MySQL数据库的环境配置结束。
2.对数据库的增删改查操作 1.对数据库的查询操作1.1查询全部数据并输出
mysql_store_result()函数可以将查询到的全部结果读取到客户端,然后可以调用mysql_fetch_row()来获取结果集中的行,需要注意的是,一旦完成了对结果集的操作,就必须调用mysql_free_result()来释放结果集。
#include <mysql.h> // mysql文件 #include <iostream> #include <cstring> #include <stdio.h> using namespace std; MYSQL mysql; //数据库句柄 MYSQL_RES* res; //查询结果集 MYSQL_ROW row; //记录结构体 //查询全部数据并输出 void display() { //查询数据 int ret = mysql_query(&mysql, "select * from student;"); //获取结果集 res = mysql_store_result(&mysql); cout << "ID " << "name " << "age " << "score" << endl; //给ROW赋值,判断ROW是否为空,不为空就打印数据。 while (row = mysql_fetch_row(res)) { cout << row[0] << " ";//打印ID cout << row[1] << " ";//打印name cout << row[2] << " ";//打印age cout << row[3] << endl;//打印score } //释放结果集 mysql_free_result(res); //关闭数据库 mysql_close(&mysql); } int main() { //初始化数据库 mysql_init(&mysql); //设置字符编码 mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk"); //连接数据库 if (mysql_real_connect(&mysql, "localhost", "root", "root", "student", 3306, NULL, 0) == NULL) //localhost为服务器,root为用户名和密码,school为数据库名,3306为端口 { printf("错误原因: %s\\n", mysql_error(&mysql)); printf("连接失败!\\n"); exit(-1); } display(); //关闭数据库 mysql_close(&mysql); return 0; }1.2查询指定数据并将mysql_fetch_row返回的字段中int或float的字段赋值给int或float类型的变量
由于mysql_row指针返回的是字符串数组,所有类型的数据都是作为字符串返回给客户端的,所有我们可以利用atoi()和stof()函数来实现将mysql_row中的字符串转化为对应的整型和浮点型的值。
//查询特定数据 void select(int& ID, char str[], int& age, float& score) { char str1[64] = "SELECT * FROM student WHERE NAME='"; char str2[2] = "'"; char buffer[1024];//缓冲区数组 sprintf_s(buffer, "%s%s%s", str1, str, str2); mysql_query(&mysql, buffer); res = mysql_store_result(&mysql); //给ROW赋值,判断ROW是否为空,不为空就打印数据。 while (row = mysql_fetch_row(res)) { ID = atoi(row[0]); age = atoi(row[2]); score = atof(row[3]); cout <<"ID=" << ID << " name=" << row[1] << " age=" << age << " score=" << score << endl; } //释放结果集 mysql_free_result(res); } 2.对数据库的插入数据操作sprintf()与printf()类似,只不过printf()是将内容打印至控制台,而sprintf()是将字符串打印至缓冲区。sprintf()主要功能是把格式化的数据写入某个字符串中,可以实现将字符串与数值拼接,并保存为一个字符串的功能,从而可以通过多个字符串与数值变量拼接,来实现可变的查询、插入、删除等sql语句。其中sprintf_s()是sprintf()的安全版本,它通过指定缓冲区长度来避免sprintf()存在的溢出风险,在使用上二者并无太大差别,但是在VS2018之后的版本如果使用sprintf()编译器会发出报错,提示你将其修改为sprintf_s()。
void insert(MYSQL* conn, int ID, char name[20], int age, float score) //插入数据 { char str[64] = "INSERT INTO student VALUES( "; char buffer[128] = { 0 }; char str2[4] = ",'"; char str3[4] = "',"; char str4[2] = ","; char str5[2] = ")"; int len = sprintf_s(buffer, "%s%d%s%s%s%d%s%f%s", str, ID, str2, name, str3, age, str4, score, str5); mysql_query(&mysql, buffer); if (len < 0) cout << "存档失败!" << endl; if (len > 0) cout << "存档成功!" << endl; } 3.对数据库的更新数据操作 void update(MYSQL* conn, int ID, char name[20], int age, float score) //更新数据 { char str[64] = "UPDATE student SET ID="; char buffer[128] = { 0 }; char str2[16] = ",age="; char str3[16] = ",score="; char str4[32] = " WHERE name='"; char str5[10] = "'"; int len = sprintf_s(buffer, "%s%d%s%d%s%f%s%s%s", str, ID, str2, age, str3, score, str4, name, str5); mysql_query(&mysql, buffer); if (len < 0) cout << "修改失败!" << endl; if (len > 0) cout << "修改成功!" << endl; } 4.对数据库的删除数据操作 void delete(char str2[]) //删除数据 { char str1[64] = "DELETE FROM student WHERE name='"; char str3[10] = "'"; char buffer[1024]; int len = sprintf_s(buffer, "%s%s%s", str1, str2, str3); mysql_query(&mysql, buffer); if (len < 0) cout << "删除失败!" << endl; else cout << "删除成功!" << endl; }版权声明:本文标题:使用C++实现MySQL数据库编程 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686768131a100208.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论