乌市泽哥 发表于 2024-6-11 12:02:06

【MySQL】MySQL Connect -- 详解

一、Connector / C 利用

要利用 C 语言连接 MySQL,需要利用 MySQL 官网提供的库,可以去官网进行下载:MySQL :: MySQL Community Downloads
我们利用 C 接口库来进行连接,要正确利用,还需要做一些预备工作:
      

[*]保证 MySQL 服务有效。
[*]在官网上下载合适本身平台的 MySQL Connect 库,以备后用。
    现在可以不需要像上面这样做了,因为我们在安装数据库时,系统就已经帮我们安装好了。
https://img-blog.csdnimg.cn/direct/16d79b576a4a4d29a62ab5868ed2997d.png
https://img-blog.csdnimg.cn/direct/866a00c81e0742ed8961c8c497b881ca.png
二、预备工作

1、验证库是否引入成功

https://img-blog.csdnimg.cn/direct/33b90443cadc447da0aa0f98e0f2fb09.png
编译并运行:
https://img-blog.csdnimg.cn/direct/c9b6284fa9e0485496a19aa279c20ad1.png
可以检察到当前 mysql 客户端的版本号。
https://img-blog.csdnimg.cn/direct/90b2eab4f8944bed990b4393df94f1c2.png
三、MySQL 接口介绍

MySQL :: Developer Zone
https://img-blog.csdnimg.cn/direct/d29f4b9b70d44471bdd66f5d2c35cec4.png
可以自行选择:
https://img-blog.csdnimg.cn/direct/f96bf542eea2435497d981e431fb64d5.png
https://img-blog.csdnimg.cn/direct/03012981feaa4c17883787f0b9023c76.png
1、初始化 mysql_init()

要利用库,就必须先进行初始化。
https://img-blog.csdnimg.cn/direct/58ed29e9aac14712a793655677f51707.png
   https://img-blog.csdnimg.cn/direct/4ade115b1def45c883e2b7fb3f971d16.png 2、链接数据库 mysql_real_connect

初始化完毕之后,必须先链接数据库,在进行后续操作(MySQL 网络部门是基于 TCP/IP的)。
https://img-blog.csdnimg.cn/direct/70f42f978634405e90aa8a5716eaa373.png
第一个参数 MYSQL 是 C api 中一个非常重要的变量(mysql_init 的返回值),内里内存非常丰富,有 port,dbname,charset 等连接基本参数。它也包含了一个叫 st_mysql_methods 的结构体变量,该变量内里保存着很多函数指针,这些函数指针将会在数据库连接成功以后的各种数据操作中被调用。
https://img-blog.csdnimg.cn/direct/87c588c8feeb435daa68a69e7da2aa5a.png
https://img-blog.csdnimg.cn/direct/89e821a69bb34bc29cc2336d8b4890bb.png
https://img-blog.csdnimg.cn/direct/4e83f196a5d3436eafdc2d97756cda15.png
创建好链接之后,获取英文没有题目,如果获取中文是乱码:需要设置链接的默认字符集为 utf-8,原始默认是 latin1。
https://img-blog.csdnimg.cn/direct/2cc9fb864efd40c2ada890751dcf7ae5.png
3、下发 MySQL 下令 mysql_query

https://img-blog.csdnimg.cn/direct/1a806a7b2fae4687b1d8bc4060c76279.png
第二个参数是要执行的 sql 语句,如 select * from table。
   https://img-blog.csdnimg.cn/direct/1d8a1657b2064f118431011fde2043c7.pnghttps://img-blog.csdnimg.cn/direct/c53c373622e94413b15fface074bcd7e.png
https://img-blog.csdnimg.cn/direct/193632b88a7c405a90d0ba9c0c7fe941.png
https://img-blog.csdnimg.cn/direct/8dafffb05e5c402eb7fcfaa7bd313fcc.png
https://img-blog.csdnimg.cn/direct/7d2b2895202c475384a8a01be46249bf.png
   https://img-blog.csdnimg.cn/direct/b17a8c23068a483bac81a74e3bd6edd2.png 4、获取执行结果 mysql_store_result

sql 执行完以后,如果是查询语句,固然还要读取数据。如果 update,insert 等语句,那么就看下操作成功与否即可。
来看看怎样获取查询结果: 如果 mysql_query 返回成功,那么就通过 mysql_store_result 这个函数来读取结果。原型如下:
https://img-blog.csdnimg.cn/direct/4667f3a29b5d4530b7882dd06565f57c.png
https://img-blog.csdnimg.cn/direct/51be9710cfd1491fa78c52b7a8e0266e.png
该函数会调用 MYSQL 变量中的 st_mysql_methods 中的 read_rows 函数指针来获取查询的结果,同时该函数还会返回 MYSQL_RES 这样一个变量,这个变量主要用于保存查询的结果。同时该函数 malloc 了一片内存空间来存储查询过来的数据,以是肯定要记得 free(result),不然肯定会造成内存泄漏的。 执行完 mysql_store_result 后,其实数据都已经在 MYSQL_RES 变量中了,下面的 api 基本就是读取 MYSQL_RES 中的数据。
https://img-blog.csdnimg.cn/direct/78a08b7a4a94476aa25ba5c3e835b217.png
 MYSQL_RES 结构体可以行列为单元把查询得到的表结构数据组织好。
在我们利用 mysql_query 函数进行查询结果后,对应的数据就被存放进了 MYSQL 结构体相应的空间中,此时我们再调用 mysql_store_result 函数,把这部门数据转储进 MYSQL_RES 结构体里。
https://img-blog.csdnimg.cn/direct/4050215dbd81455892e8afe819aa315e.png
(1)获取结果行数 mysql_num_rows

https://img-blog.csdnimg.cn/direct/a58813e6840f4c4893672d6dfaa133b5.png
https://img-blog.csdnimg.cn/direct/19bfea960ab8405fb5ef8fd88cc78e24.png
https://img-blog.csdnimg.cn/direct/ee9a40684f4f42a5b2720adeaa5069c7.png
https://img-blog.csdnimg.cn/direct/c7ccbe45063043c18d2284eb74ca0850.png
(2)获取结果列数 mysql_num_fields

https://img-blog.csdnimg.cn/direct/a93d160e2c9c41b9a7e68c988a13c479.png
https://img-blog.csdnimg.cn/direct/806403f7c05049fda82578089944324a.png
https://img-blog.csdnimg.cn/direct/f269e6f4d5b5429988433e4178adb99f.png
https://img-blog.csdnimg.cn/direct/5008b0351f464ff28811b49703bf793c.png
         (3)获取列名 mysql_fetch_fields

       https://img-blog.csdnimg.cn/direct/a46fea5b257c417692aacbbab085305c.png
   MYSQL_FIELD 中存储列的所有属性信息:
   https://img-blog.csdnimg.cn/direct/01b7ae7c577b4e8a963cd690c3d84892.png
   https://img-blog.csdnimg.cn/direct/2256501792594b7786b3f98de0880e05.png
   https://img-blog.csdnimg.cn/direct/5a2b4b3fdb7a4f18b28d373500d3cdf0.png
      (4)获取结果内容 mysql_fetch_row

   https://img-blog.csdnimg.cn/direct/948878be4f21402ab58a4cd5d59b37d8.png
   https://img-blog.csdnimg.cn/direct/dc9086b382534fc29a121574e3c67491.png
    它会返回一个 MYSQL_ROW 变量,MYSQL_ROW 其实就是 char**,就把它当作一个二维数组来用。
https://img-blog.csdnimg.cn/direct/13f16881667d4604ba9d6e4eb2aa355d.png
   注意:mysql 将所有的数据读取出来时,全都当作字符串。
https://img-blog.csdnimg.cn/direct/37797f5255a54be8bd4217ad309e2d13.png
https://img-blog.csdnimg.cn/direct/9c10870e3c7b4116bb59895425f8c0d3.png
5、释放结果集的空间 mysql_free_result

https://img-blog.csdnimg.cn/direct/4f0e26cc00df4ec997e2a07af0346aa7.png
https://img-blog.csdnimg.cn/direct/e508c767c5f84e8f89fa690fa4d76bef.png
6、关闭 MySQL 链接 mysql_close

https://img-blog.csdnimg.cn/direct/d2c0402b89b5422c931e2b8c0acf2d66.png
https://img-blog.csdnimg.cn/direct/107adb8a773a4e93aa54eab73bc44afb.png
MySQL C api 还支持事件等常用操作,可以自行了解:
my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode);
my_bool STDCALL mysql_commit(MYSQL * mysql);
my_bool STDCALL mysql_rollback(MYSQL * mysql);
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【MySQL】MySQL Connect -- 详解