MySQL 数据库应用程序编程
普通用户使用客户端应用程序(Client Application)和服务器程序(Server Application)通信以取得服务, 而服务器程序通常要和数据库服务器通信以取得数据存取服务, 这时就需要使用到使用到数据库连接技术, 我本人将使用数据库连接技术编程, 称为数据库应用程序编程, 更多时候的数据库应用程序编程依赖数据库发行商提供的驱动程序或接口模块.
MySQL 为程序员提供了多种编程语言的接口, 如使用 C 语言编程, 则可以下载 MySQL Connector C 套件, 解压后得到 include 目录下的头文件, 和 lib 目录下的共态链接库 libmysql.dll, 该动态链接库 的导入库libmysql.lib, 以及静态对象库 mysqlclient.lib, 显然, 使用动态链接库的编译速度更快.
关于这些 API 的使用方法, 请参考官方文档, 下面是一个演示.
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <assert.h>
#include <C:\Program Files\MySQL\MySQL Connector C 6.1\include\mysql.h> #pragma comment(lib, "C:\\Program Files\\MySQL\\MySQL Connector C 6.1\\lib\\libmysql.lib") void Todo(MYSQL *mysql) { const char *a = mysql_stat(mysql);
printf("数据库连接状态:\n"
"%s\n", a); // 创建一个数据库
char cmd[];
sprintf(cmd, "CREATE DATABASE `my_test_db`"); if (mysql_query(mysql, cmd) != EXIT_SUCCESS) {
printf("创建失败!\n"
"%d: %s\n", mysql_errno(mysql), mysql_error(mysql));
} else {
printf("创建成功!\n");
} // 选择数据库
sprintf(cmd, "USE `my_test_db`");
if (mysql_query(mysql, cmd) != EXIT_SUCCESS) {
printf("选择失败!\n"
"%d: %s\n", mysql_errno(mysql), mysql_error(mysql));
return ;
} else {
printf("选择了表!\n");
} // 创建表
sprintf(cmd, "CREATE TABLE `t`("
"ID INT NOT NULL AUTO_INCREMENT,"
"Name VARCHAR(20) NOT NULL,"
"PRIMARY KEY(ID)"
")");
if (mysql_query(mysql, cmd) != EXIT_SUCCESS) {
printf("创建失败!\n"
"%d: %s\n", mysql_errno(mysql), mysql_error(mysql));
} // 查看表型
sprintf(cmd, "DESC `t`");
if (mysql_query(mysql, cmd) != EXIT_SUCCESS) { printf("查看失败!\n"
"%d: %s\n", mysql_errno(mysql), mysql_error(mysql)); } else { // 取结果集
MYSQL_RES *res;
res = mysql_store_result(mysql); if (res == NULL) {
printf("查询没有返回结果\n");
} else { int fc = mysql_field_count(mysql);
printf("字段数量: %u.\n", fc);
// 一行一行地取结果
MYSQL_ROW row;
while (row = mysql_fetch_row(res)) {
int i = ;
for (; i < fc; i++) {
printf("|%s\t", row[i] != NULL ? row[i] : "NULL");
}
printf("\n");
}
}
}
} void Test() { // 初始化 MySQL 客户端模块
assert(mysql_library_init(, NULL, NULL) == EXIT_SUCCESS); // 获取数据库描述符
MYSQL *mysql = NULL;
mysql = mysql_init(mysql);
// 连接数据库
if (mysql_real_connect(mysql, "localhost", "root", "passwd", NULL, , NULL, ) == NULL) {
printf("连接失败!\n");
printf("%d: %s\n", mysql_errno(mysql), mysql_error(mysql));
} // 你想用数据库做些什么事情?
Todo(mysql); // 关闭数据库连接
mysql != ? mysql_close(mysql) : ;
// 释放模块
mysql_library_end();
} int APIENTRY _tWinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR lpszCmdLine, int iCmdShow) { // 分配控制台
AllocConsole(); //
Test(); printf("\n"
"The end.\n"); // 消息循环
MSG msg;
while (GetMessage(&msg, NULL, , ) > ) {
TranslateMessage(&msg);
DispatchMessage(&msg);
} return EXIT_SUCCESS;
}
第一次运行:

再次运行:

MySQL 数据库应用程序编程的更多相关文章
- 第十三章.MySQL数据库与JDBC编程(下)
JDBC的典型用法: JDBC4.2常用接口和类简介: DriverManager:用于管理JDBC驱动的服务类,程序中使用该类的主要功能是获取Connection对象,该类包含如下方法: publi ...
- MySql数据库与JDBC编程二
DML语法语句:主要操作数据表中的数据,完成插入新数据,修改已有数据,删除不要的数据的任务 1,insert into 语句 用于向指定表插入数据,一次只能插入一条记录:insert into tab ...
- MySql数据库与JDBC编程
JDBC -- Java Database Connectivity,即Java数据库连接,通过使用JDBC就可以使用同一种API访问不同的数据库 SQL语句基础(SQL结构化查询语言) 能完成的任务 ...
- 批量备份mysql数据库(shell编程)
#!/bin/bash DBPATH=/mysqlbak MYUSER=root MYPASS= SOCKET=/var/lib/mysql/mysql.sock MYCMD="mysql ...
- MySql数据库与JDBC编程三
多表连接查询(两种规范 SQL92和SQL99) SQL92规范: 等值连接,非等值连接,外连接,广义笛卡儿积连接 多个表都放在from后,,连接条件放在where后,条件要求两列值相等,则为等值连接 ...
- 项目--解决MySQL数据库插入中文乱码
转载自:http://blog.csdn.net/zzh920625/article/details/51226312 情景再现] 如图,在项目中使用MySQL数据库,在做插入操作时,写入英文字符没有 ...
- MySQL数据库服务器的架设
导读 MySQL数据库是Linux操作系统上用得最多的数据库系统,它可以非常方便的与其它服务器集成在一起,如Apache.Vsftpd.Postfix等.下面介绍RHEL 6平台MySQL数据库服务器 ...
- 沃森Mysql数据库修复工具
华信Mysql数据库修复程序是由北京华信数据恢复中心独立研发.主要针对Mysql数据库损坏的恢复. 本程序可用于因为各种误操作而导致数据丢失的恢复,以及因为断电.陈列损坏.硬盘坏道等各种原因导致数据库 ...
- 在控制台使用MySQL数据库
本篇内容介绍的是如何在控制台下使用MySQL数据库.首先需要安装MySQL数据库应用程序,然后找到MySql的Command Line Client进入之后你会看到,此处需要正确输入密码,否则会直接退 ...
随机推荐
- ftp:linux下利用shell脚本添加虚拟用户并赋予权限
首先ftp配置应为虚拟用户登录模式 用户密码文本目录为/etc/vsftpd/vftpuser,代码如下: #!/bin/bash # ];then username=$ password=$ hom ...
- Java 枚举 的学习
在JDK5.0之后,引进了一种与C语言相通的枚举类型. 所谓枚举类型就是指含有一组具有固定值, 并且容量有限的数据集合. 例如,定义一个星期的枚举类型, 从周一到周日是具有固定大小和固定值的集合 pu ...
- hexo+next主题目录解析
默认目录结构: . ├── .deploy ├── public ├── scaffolds ├── scripts ├── source | ├── _drafts | └── _posts ├── ...
- Linux安装Gitlab,附iSCSI分区挂载说明
因为Gitlab数据要存放在共享存储,所以本次配置的重头戏倒变成了挂载ISCSI了. OS:CentOS 7.2IP:172.16.1.191/192.168.2.191 iSCSI分Target(服 ...
- kafaka quickstart
http://kafka.apache.org/ http://kafka.apache.org/downloads cd /root/kafuka/kafka_2.12-0.11.0.0 nohup ...
- 【CF1119E】Pavel and Triangles
题目大意:有 N 种长度的边,第 i 种长度为 \(2^i\),给定一些数量的这些边,问最多可以组合出多少种三角形. 题解:应该是用贪心求解,不过选择什么样的贪心策略很关键. 首先分析可知,两个较大边 ...
- Python函数的定义与调用、返回值、参数
一.函数是什么 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.比如print(),len()等.但你也可以自己创建函数,这被叫做用户自 ...
- webDriver文档阅读笔记
一些雷 浏览器版本和对应的Driver的版本是一一对应的,有时候跑不起来,主要是因为driver和浏览器版本对不上. e.g: chrome和driver版本映射表:https://blog.csdn ...
- java参数可变方法
java中允许一个方法中存在多个参数 public class Parmvarexmple { //参数可变的方法 public int sum(int...n) { int tempSum=0; f ...
- PHP工厂方法模式
此模式中,通过定义一个抽象的核心工厂类,并定义创建产品对象的接口,创建具体产品实例的工作延迟到其工厂子类去完成.这样做的好处是核心类只关注工厂类的接口定义,而具体的产品实例交给具体的工厂子类去创建.当 ...