设计网官方网站深圳推广网络

当前位置: 首页 > news >正文

设计网官方网站,深圳推广网络,cms系统主要做什么,网站设计好做吗文章目录 一、准备工作二、验证库和接口的使用三、链接数据库四、对数据库进行增删查改增删改查 五、结尾 一、准备工作 要使用C链接数据库, 首先要去MySQL官网下载官网提供的库, MySQL 社区下载. 如图所示: 接着选择: 按需选择版本: 如果用的是云服务器, 那么在安装mysql时… 文章目录 一、准备工作二、验证库和接口的使用三、链接数据库四、对数据库进行增删查改增删改查 五、结尾 一、准备工作 要使用C链接数据库, 首先要去MySQL官网下载官网提供的库, MySQL 社区下载. 如图所示: 接着选择: 按需选择版本: 如果用的是云服务器, 那么在安装mysql时默认就会把这些库都给装上了. 成功安装后会获得这些库和接口: 查看头文件指令: ls /usr/include/mysql/查看库的指令: ls /lib64/mysql/如果查看对应目录存在这些库和接口就ok了. 二、验证库和接口的使用 需要包含的头文件: #include mysql/mysql.h 测试代码: #include mysql/mysql.h #include iostream using namespace std;int main() {cout mysql client version: mysql_get_client_info() endl;return 0; }函数: mysql_get_client_info() 这个函数的功能就是查看当前mysql客户端的版本, 如果能成功执行并输出版本号, 就表示当前库和接口都是可以使用的, 可以开始链接数据库了. 一般来说直接编译会失败, 会出现类似提示: 要解决该问题, 首先在编译时指明头文件所在目录, 库所在目录, 再指定需要链接的库的名字, 如下: g -o test test.cpp -stdc11 -I /usr/include/mysql -L /lib64/mysql -lmysqlclient再把库所在的路径添加到系统的动态库查找路径中: export LD_LIBRARY_PATH./lib64此时直接执行就好了, 结果如下: 成功输出版本信息就对了. 三、链接数据库 首先需要定义一个类型为MYSQL*的变量, 并使用MYSQL *mysql_init(MYSQL mysql)函数对该变量进行初始化 MYSQL my mysql_init(nullptr); //定义并初始化MySQL变量初始化完毕后, 进行链接数据库操作, 通过函数: MYSQL* mysql_real_connect(MYSQL *mysql, //调用mysql_init()以初始化MYSQL结构变量const char *host, //主机名或 IP 地址const char *user, //用户的 MySQL 登录 IDconst char *passwd, //密码, 如果passwd为NULL则仅检查表中user具有空白密码字段的用户条目是否匹配。const char *db, //数据库名称unsigned int port, //端口号const char unix_socket, //如果unix_socket不是 NULL则字符串指定要使用的套接字或命名管道unsigned long client_flag //client_flag通常为0但可以设置为其他标志的组合以启用某些功能)示例代码: mysql_real_connect(my, 127.0.0.1, root, nullptr, conn, 3306, nullptr, 0)关于mysql_real_connect()的返回值: 可以根据返回结果判断是否真的链接上数据库, 具体代码: #include mysql/mysql.h #include iostream using namespace std;int main() {MYSQL my mysql_init(nullptr); //定义并初始化MySQL变量//链接数据库if(mysql_real_connect(my, 127.0.0.1, root, nullptr, conn, 3306, nullptr, 0)){cout connect success. endl;}return 0; }结果:
四、对数据库进行增删查改 向链接的数据库下发sql语句的函数int mysql_query(MYSQL *mysql, const char *stmt_str). 第一个参数是之前初始化的MYSQL变量, 第二个参数是字符串形式的sql语句. 返回值:
增删查改操作的表结构:
增 首先看到表里是没有数据的: 通过mysql_query()插入数据: mysql_query(my, insert info(name,age,gender) values(张三,18,1));执行后, 数据成功插入对应的数据库中: 其他的数据都和预期插入的数据一致, 唯独name不一致, 这是因为我的数据库的字符集是utf8而通过语言设置链接的默认字符集为latin1, 由于字符集不匹配而导致了乱码, 所以在建立链接后可以修改默认字符集: mysql_set_character_set(my, utf8); //设置字符集再编译执行: 此次插入的数据就没问题了. 删 通过 mysql_query(my, delete from info;);直接执行, 结果: 成功删除. 改 现在表中没有数据, 先插入一条数据: mysql_query(my, insert info values(1,张三,18,1));查看表中的数据: 接着输入更新的sql语句就完事了: mysql_query(my, update info set age28 where id1);将年龄更改为28, 编译执行后:
查 增删改都很简单, 就是在mysql_query()中写sql语句, 然后查看操作是否成功就好了, 但是查的话不太一样, 虽然查询语句也是直接在mysql_query()中写, 但是查的关键是要拿到查询结果, 需要获得查询结果可以通过函数: MYSQL_RES
mysql_store_result(MYSQL *mysql)参数就是之前定义的那个MYSQL类型的变量, 而返回值是重点: 也就是要定义一个MYSQL_RES类型的变量来接收结果, 此外, 观察输出结果, 可以看到输出的是一个二维的数组, 那么它必有对应的行数和列数, 而通过my_ulonglong mysql_num_rows(MYSQL_RES *res)和unsigned int mysql_num_fields(MYSQL_RES *res)可以分别获得对应结果的行数和列数. 如果想要获得属性名称列, 即这一行: 可以通过函数MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res)获取, 它的参数就是通过函数获取到的结果. 既然返回值是数组那么就可以用下标直接访问其对应结构体的元素: mysql_query(my, select * from info); //查询MYSQL_RES* res mysql_store_result(my); //获取结果结构体 int row mysql_num_rows(res); //获取行数 int col mysql_num_fields(res); //获取列数 MYSQL_FIELD* fields mysql_fetch_fields(res); //获得属性名称for(int i 0; i col; i) {cout fields[i].name ; } cout endl;输出结果: 没问题, 成功拿到属性名称, 接着来获取数据内容, 通过函数MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)可以获取到, 其返回值为MYSQL_ROW类型的一个变量, 可以把它当成一个char**的二维数组来使用, 类似: 例子: MYSQL_ROW line; for(int i 0; i row; i) {line mysql_fetch_row(res);for(int j 0; j col; j){cout line[j] \t;}cout endl; }输出结果: 没问题, 成功获取到了表中的内容数据, 需要注意想要获取下一行数据内容并不需要我们手动操作, 每调用一次mysql_fetch_row(res)函数都会自动获取下一行的内容数据, 然后再遍历该行的内容数据即可, 完整获取查询结果代码: mysql_query(my, select * from info);MYSQL_RES* res mysql_store_result(my); //获取结果结构体 int row mysql_num_rows(res); //获取行数 int col mysql_num_fields(res); //获取列数 MYSQL_FIELD* fields mysql_fetch_fields(res); //获得属性名称//获取属性名称 for(int i 0; i col; i) {cout fields[i].name \t; } cout endl;MYSQL_ROW line; //获取内容数据 for(int i 0; i row; i) {line mysql_fetch_row(res);for(int j 0; j col; j){cout line[j] \t;}cout endl; }结果:
五、结尾 在最后不需要访问数据库了, 记得把链接关了, 通过函数void mysql_close(MYSQL *mysql)来关闭链接, 参数即为之前创建的MYSQL*类型的变量. 如需了解其他接口, 可直接访问MySQL的官方文档: C API 函数参考