从0开始学习C++与数据库的联动
1.原始方式-使用MySQL Connector/C 提供的API查询
1.1 数据库预操作
我的本地电脑上有mysql数据库,里面预先创建了一个database名叫chat,用户名root,密码password。
1.2 Visual Studio预操作
在Windows上使用VS需要加一些路径之类的,这样才可以使用MySQL C API。否则,无法找到mysql.h,无法正常链接dll、lib,无法编译。
1.下载MySQL Connector/C;
2.配置包含目录和库目录:
“C/C++” -> “常规” -> “附加包含目录”,添加MySQL Connector/C的include目录。
“链接器” -> “常规” -> “附加库目录”,添加MySQL Connector/C的lib目录。
3.配置链接库:
在“链接器” -> “输入” -> “附加依赖项”,添加以下库文件:
libmysql.lib:MySQL C API的静态库。
mysqlclient.lib:MySQL C API的动态链接库。
4.拷贝运行时依赖项: 将MySQL Connector/C的bin目录添加到系统的PATH环境变量中,并将libmysql.dll文件复制到vcxproj文件所在的目录。
1.3 简单查询程序
1.下面是一个单线程的程序,所有的数据库连接和查询都是在主线程中执行的。(里面可能有一些不安全的操作,方便理解没有管,比如close函数里传nullptr是不安全的,NULL最好改成nullptr便于与0值区分等。)
2.mysql.h声明了MYSQL、MYSQL_ROW、MYSQL_RES等结构体和一些mysql_init这样的函数,必须包含这个头文件,编译才不会出错。
从https://dev.mysql.com/doc/c-api/8.0/en/c-api-basic-function-reference.html摘了一些出来,可跳转链接看具体的接口参数
结构体:
函数接口:
2.将上述API查询封装到类里,调用自己的函数查询
上面的代码主要是用到了mysql_init,mysql_real_connect,mysql_query,mysql_store_result,mysql_free_result,mysql_close这些mysql.h里声明的一些函数。如果我们想用这些函数进行对MYSQL数据库内数据的操作,用的是MYSQL*类型的指针conn进行操作。
那么,在此基础之上,我们可以将这些函数进一步的封装,用一个类中的成员函数去分别调用它们。具体而言,我们自己定义一个Connection类,里面放一个私有成员对象MYSQL* _conn指针,以及构造、析构、连接、更新、查询函数,而这些函数又分别调用了初始的mysql_init,mysql_real_connect,mysql_query,mysql_store_result,mysql_free_result,mysql_close这些mysql.h里声明的一些函数,调用的参数是初始函数所需的参数加上conn指针。在我们自己实现的函数里,还可以额外加一些LOG语句。当我们对这个类进行实例化的时候,用类实例.成员函数()就可以真正对数据库进行增删改查。