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进入之后你会看到,此处需要正确输入密码,否则会直接退 ...
随机推荐
- dasd
https://www.crifan.com/use_pyinstaller_to_package_python_to_single_executable_exe/ http://blog.csdn. ...
- Distinct Values(2018hdu多校第一场)
给你一段长度为n的区间,然后在给你m个小区间,要求这m个小区间里的每个人都不能重复,请你输出字典序最小的方案. 我们可以开一个suf数组,表示我到我后面的不出现重复数字的区间至少需要到达的位置.所以对 ...
- 【docker】docker安装和使用
一.docker简介: docker是容器技术的一个代表,而容器技术是将程序打包和隔离的一种技术,其实它并不是一个新技术,之前在linux内核中早已存在,真正被大众所用所了解是因为docker的出现. ...
- 2019.4.1考试&2019.4.2考试&2019.4.4考试
4.1:T1原题,T2码农板子题,T3板子题 4.2 好像是三个出题人分别出的 以及#define *** 傻逼 T1 思维好题 转成树形DP,$dp[i][j]$表示点i值为j的方案数,记录前缀和转 ...
- A1131. Subway Map (30)
In the big cities, the subway systems always look so complex to the visitors. To give you some sense ...
- win32: WM_PAINT 实现双缓冲缓图
相关参考资料: GDI下实现双缓冲 - http://jingyan.baidu.com/article/e73e26c0f8df2424acb6a76e.html <Win32_19>用 ...
- python简单购物车改进版
# -*- coding: utf-8 -*- """ ┏┓ ┏┓ ┏┛┻━━━┛┻┓ ┃ ☃ ┃ ┃ ┳┛ ┗┳ ┃ ┃ ┻ ┃ ┗━┓ ┏━┛ ┃ ┗━━━┓ ┃ 神 ...
- bcftools将vcf生成bgzip和index格式
利用bcftools软件将vcf格式生成gz格式和index格式,需要用到“-Oz”和“index”命令,具体如下: /bcftools-1.8/bin/bcftools view ExAC.vcf ...
- 缓存数据库-redis数据类型和操作(list)
转: 狼来的日子里! 奋发博取 缓存数据库-redis数据类型和操作(list) 一:Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素导列表的头部( ...
- Gym 101911E "Painting the Fence"(线段树区间更新+双端队列)
传送门 题意: 庭院中有 n 个围栏,每个围栏上都被涂上了不同的颜色(数字表示): 有 m 条指令,每条指令给出一个整数 x ,你要做的就是将区间[ x第一次出现的位置 , x最后出现的位置 ]中的围 ...