博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 数据库应用程序编程
阅读量:5011 次
发布时间:2019-06-12

本文共 3097 字,大约阅读时间需要 10 分钟。

普通用户使用客户端应用程序(Client Application)和服务器程序(Server Application)通信以取得服务, 而服务器程序通常要和数据库服务器通信以取得数据存取服务, 这时就需要使用到使用到数据库连接技术, 我本人将使用数据库连接技术编程, 称为数据库应用程序编程, 更多时候的数据库应用程序编程依赖数据库发行商提供的驱动程序或接口模块.

MySQL 为程序员提供了多种编程语言的接口, 如使用 C 语言编程, 则可以下载 MySQL Connector C 套件, 解压后得到 include 目录下的头文件, 和 lib 目录下的共态链接库 libmysql.dll, 该动态链接库 的导入库libmysql.lib, 以及静态对象库 mysqlclient.lib, 显然, 使用动态链接库的编译速度更快.

 

关于这些 API 的使用方法, 请参考官方文档, 下面是一个演示.

 

 

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 8 #pragma comment(lib, "C:\\Program Files\\MySQL\\MySQL Connector C 6.1\\lib\\libmysql.lib") 9 10 void Todo(MYSQL *mysql) { 11 12 const char *a = mysql_stat(mysql); 13 printf("数据库连接状态:\n" 14 "%s\n", a); 15 16 // 创建一个数据库 17 char cmd[1024]; 18 sprintf(cmd, "CREATE DATABASE `my_test_db`"); 19 20 if (mysql_query(mysql, cmd) != EXIT_SUCCESS) { 21 printf("创建失败!\n" 22 "%d: %s\n", mysql_errno(mysql), mysql_error(mysql)); 23 } else { 24 printf("创建成功!\n"); 25 } 26 27 // 选择数据库 28 sprintf(cmd, "USE `my_test_db`"); 29 if (mysql_query(mysql, cmd) != EXIT_SUCCESS) { 30 printf("选择失败!\n" 31 "%d: %s\n", mysql_errno(mysql), mysql_error(mysql)); 32 return ; 33 } else { 34 printf("选择了表!\n"); 35 } 36 37 // 创建表 38 sprintf(cmd, "CREATE TABLE `t`(" 39 "ID INT NOT NULL AUTO_INCREMENT," 40 "Name VARCHAR(20) NOT NULL," 41 "PRIMARY KEY(ID)" 42 ")"); 43 if (mysql_query(mysql, cmd) != EXIT_SUCCESS) { 44 printf("创建失败!\n" 45 "%d: %s\n", mysql_errno(mysql), mysql_error(mysql)); 46 } 47 48 // 查看表型 49 sprintf(cmd, "DESC `t`"); 50 if (mysql_query(mysql, cmd) != EXIT_SUCCESS) { 51 52 printf("查看失败!\n" 53 "%d: %s\n", mysql_errno(mysql), mysql_error(mysql)); 54 55 } else { 56 57 // 取结果集 58 MYSQL_RES *res; 59 res = mysql_store_result(mysql); 60 61 if (res == NULL) { 62 printf("查询没有返回结果\n"); 63 } else { 64 65 int fc = mysql_field_count(mysql); 66 printf("字段数量: %u.\n", fc); 67 // 一行一行地取结果 68 MYSQL_ROW row; 69 while (row = mysql_fetch_row(res)) { 70 int i = 0; 71 for (; i < fc; i++) { 72 printf("|%s\t", row[i] != NULL ? row[i] : "NULL"); 73 } 74 printf("\n"); 75 } 76 } 77 } 78 } 79 80 void Test() { 81 82 // 初始化 MySQL 客户端模块 83 assert(mysql_library_init(0, NULL, NULL) == EXIT_SUCCESS); 84 85 // 获取数据库描述符 86 MYSQL *mysql = NULL; 87 mysql = mysql_init(mysql); 88 // 连接数据库 89 if (mysql_real_connect(mysql, "localhost", "root", "passwd", NULL, 3306, NULL, 0) == NULL) { 90 printf("连接失败!\n"); 91 printf("%d: %s\n", mysql_errno(mysql), mysql_error(mysql)); 92 } 93 94 // 你想用数据库做些什么事情? 95 Todo(mysql); 96 97 // 关闭数据库连接 98 mysql != 0 ? mysql_close(mysql) : 0; 99 // 释放模块100 mysql_library_end();101 }102 103 int APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR lpszCmdLine, int iCmdShow) {104 105 // 分配控制台106 AllocConsole();107 108 // 109 Test();110 111 printf("\n"112 "The end.\n");113 114 // 消息循环115 MSG msg;116 while (GetMessage(&msg, NULL, 0, 0) > 0) {117 TranslateMessage(&msg);118 DispatchMessage(&msg);119 }120 121 return EXIT_SUCCESS;122 }

 

第一次运行:

再次运行:

 

转载于:https://www.cnblogs.com/develon/p/9066333.html

你可能感兴趣的文章
C++复习:对C的拓展
查看>>
校外实习报告(九)
查看>>
android之android.intent.category.DEFAULT的用途和使用
查看>>
CAGradientLayer 透明渐变注意地方(原创)
查看>>
织梦DEDE多选项筛选_联动筛选功能的实现_二次开发
查看>>
iOS关于RunLoop和Timer
查看>>
SQL处理层次型数据的策略对比:Adjacency list vs. nested sets: MySQL【转载】
查看>>
已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。
查看>>
MySQL的随机数函数rand()的使用技巧
查看>>
thymeleaf+bootstrap,onclick传参实现模态框中遇到的错误
查看>>
python字符串实战
查看>>
wyh的物品(二分)
查看>>
12: xlrd 处理Excel文件
查看>>
综合练习:词频统计
查看>>
中文url编码乱码问题归纳整理一
查看>>
Cesium应用篇:3控件(3)SelectionIndicator& InfoBox
查看>>
58. Length of Last Word(js)
查看>>
前端面试题汇总(持续更新...)
查看>>
如何成为F1车手?
查看>>
QT自定义消息
查看>>