目录
1、准备工作
(1)下载mysql库(安装到C盘)
(2)引入头文件和静态库
(3)在工程中引用mysql库
(4)添加环境变量
2、开始使用mysql库
(1)引入头文件
(2)建立数据库的连接
(3)创建数据库的表单
(4)向表单填充具体内容
1、准备工作 (1)下载mysql库(安装到C盘) (2)引入头文件和静态库
将mysql安装路径下的include文件和lib文件复制到自己的工程中,同时在cmake中写入下列代码
这两句话实现的是引入mysql的头文件和静态库文件,头文件include提供了连接和使用数据库需要用到的API,如mysql_library_init、mysql_init等,libmysql.lib文件会在程序编译的时候被调用,dll文件在程序运行的时候被调用
(3)在工程中引用mysql库最外层的CmakeList.txt文件已经导入了mysql的相关库,接下来需要将工程和mysql库链接,有个比较有趣的说法就是,苹果已经买了,现在要开始分苹果了。
为了便于调用,首先将mysql库打包
接下来在最底层的CmakeList.txt文件中连接mysql库
这样, mysql库就导入完成了
(4)添加环境变量前面说到程序运行的会调用dll文件,因此我们需要将dll文件添加到环境变量,一种方法是将libmysql.dll复制到c盘中的Windows 文件中,因为Windows文件默认在系统环境变量中;另一种方法是在系统环境变量中添加mysql安装路径下的lib文件的路径
2、开始使用mysql库 (1)引入头文件 #include
#include
需要注意的是,顺序不能反,具体原因不大清楚,好像是因为windows.h中有mysql.h所需要的API,所以需要先调用 windows.h
(2)建立数据库的连接建立连接的顺序一般如下
a.初始化数据库(擦干净 柜子)
b.初始化数据结构(擦干净 开柜子的钥匙)
c.连接库(用钥匙开柜子)
MYSQL sock; const char *host = "localhost"; const char *username = "root"; const char *password = "9952"; //这里的数据库必须是要当前系统中存在的 const char *db = "test"; unsigned int port = 3306; //初始化数据库 if (0 == mysql_library_init(0, NULL, NULL)) { cout << "mysql_library_init() succeed" << endl; } else { cout << "mysql_library_init() failed" << endl; mysql_close(&sock); return -1; } //初始化数据结构 if (NULL != mysql_init(&sock)) { cout << "mysql_init() succeed" << endl; } else { cout << "mysql_init() failed" << endl; mysql_close(&sock); return -1; } //设置额外数据库选项 if (0 == mysql_options(&sock, MYSQL_SET_CHARSET_NAME, "gbk")) { cout << "mysql_options() succeed" << endl; } else { cout << "mysql_options() failed" << endl; mysql_close(&sock); } //连接数据库 if (NULL != mysql_real_connect(&sock, host, username, password, db, port, NULL, 0)) { cout << "connect with database successfully" << endl; } else { cout << "fail to connect with database" << endl; mysql_close(&sock); return -1; }
如果是第一次连接数据库,建议都用if语句判断一下,这里的mysql_options是可以设置额外的连接选项,关于详细的参数,可以参考下面其他博主的连接;代码中的sock在其他地方声明了
注意:password是安装mysql时设置的密码,db指的是数据库中的某一个库,这个库必须是数据库已经存在的库,否则会连接失败,port是端口号。
mysql_options()函数_暴走的二哈-CSDN博客_mysql_optionshttps://blog.csdn.net/qq_38570571/article/details/79870946
(3)创建数据库的表单接下来我们以菜单为例创建一个名为menu的表单
string sqlstr; //向string中写入创建表单的指令 sqlstr += "CREATE TABLE IF NOT EXISTS menu"; sqlstr += "("; sqlstr += "dish_id INT(10) NOT NULL AUTO_INCREMENT,"; sqlstr += "dishName VARCHAr(20),"; sqlstr += "price INT(10),"; sqlstr += "PRIMARY KEY(dish_id)"; //设置主键 sqlstr += ");"; //sqlstr仅仅只是存放指令,真正执行mysql语句的是mysql_query函数 if (mysql_query(&sock, sqlstr.c_str()) == 0) cout << "mysql_query() create table succeed" << endl; else { cout << "mysql_query() create table failed" << endl; mysql_close(&sock); }(4)向表单填充具体内容
sqlstr = "INSERT INTO menu(dishName,price) VALUES('酱烧鸭子',30),('粉蒸肉',45),('宫保鸡丁',27),('农家地锅鸡',41);"; if (mysql_query(&sock, sqlstr.c_str()) == 0) cout << "mysql_query() insert data succeed" << endl; else { cout << "mysql_query() insert data failed" << endl; mysql_close(&sock); }
(5)为了查看数据库中是否成功写入了数据,我们可以打开mysql的命令行输入指令
输入show databases; 可以查看当前电脑中的所有数据库
输入use test; 进入到test数据库中查看
输入show tables; 可以查看当前数据库有哪些表单
这里已经出现了我们刚才创建的表单menu
输入select * from menu; 查看menu表单中的所有数据
刚才输入的是中文,没有调整编码方式,所以出现了乱码,数据还是正常导入了
(5)删除某一行的数据删除语句就比较简单了,下面以删除 dish_id=1所在行的数据为例
//sqlstr = "delete from menu where dishName = '宫保鸡丁';" sqlstr = "delete from menu where dish_id = 1;"; mysql_query(&sock, sqlstr.c_str());
还有需要注意的是,不能忘记字符串里面的分号,如果数据类型是字符串类型,需要用单引号,否则指令可能会执行失败
以上就是本次的全部内容,如有错误,望大佬指点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)