cmake+VS2015实现C++连接并对使用mysql

cmake+VS2015实现C++连接并对使用mysql,第1张

cmake+VS2015实现C++连接并对使用mysql

目录

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());

还有需要注意的是,不能忘记字符串里面的分号,如果数据类型是字符串类型,需要用单引号,否则指令可能会执行失败

以上就是本次的全部内容,如有错误,望大佬指点。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5115096.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存