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进入之后你会看到,此处需要正确输入密码,否则会直接退 ...
随机推荐
- Android ViewSwitcher 的功能与用法
ViewSwitcher 代表了视图切换组件, 本身继承了FrameLayout ,可以将多个View叠在一起 ,每次只显示一个组件.当程序控制从一个View切换到另个View时,ViewSwitch ...
- multiset和set
set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值:另外,还 ...
- bzoj1014 火星人 (hash+splay+二分答案)
求公共前缀的问题可以用hash+二分来解决,但这个是动态的,所以我们用平衡树来维护区间的hash值 复杂度$O(mlog^2n)$ #include<bits/stdc++.h> #def ...
- centos7/centos6修改系统默认语言
应用环境: 一直在使用centos7.x,系统默认的语言也是英文环境,工作内容偶遇中文,顺便搜罗修改一番,小记如下. 测试环境: 测试步骤: CentOS 7.x 1. 查看当前语言环境 [root@ ...
- 20165223 week4测试补交与总结
JDB调试程序 调试代码 public class SumofRecur1{ public static void main(String[] args) { int i = 0; for(Strin ...
- layui记录
layui 官网 layui 独立版 layui mobile layui 社区
- 项目部署之nginx实现PC端和移动端自动跳转
假设PC端域名为 www.abc.com 移动端域名为m.abc.com PC端nginx配置文件server中加入如下代码: if ($http_host !~ "^www.abc ...
- (转)每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
背景:在redis集群中,有关于一致性哈希的使用. 一致性哈希:桶大小0~(2^32)-1 哈希指标:平衡性.单调性.分散性.负载性 为了提高平衡性,引入“虚拟节点” 每天进步一点点——五分钟理解一致 ...
- 利用SHAPEIT将vcf文件进行基因型(genotype)定相(phasing):查看两个突变是否来源于同一条链(染色体或父本或母本),two mutations carried by the same read
首先,下载SHAPEIT. 按照里面的步骤安装完后,将vcf文件进行基因型定相,分四步走. 第一步,将vcf文件转化为plink二进制文件(.bed, .bim, .fam). 这一步需要用到GATK ...
- echarts柱状图鼠标移动在柱状图上显示数据给数据添加单位
解决问题: 关键代码如下: tooltip : { trigger: 'axis', formatter:function(params){ return params[0].name+"& ...