普通用户使用客户端应用程序(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 数据库应用程序编程的更多相关文章

  1. 第十三章.MySQL数据库与JDBC编程(下)

    JDBC的典型用法: JDBC4.2常用接口和类简介: DriverManager:用于管理JDBC驱动的服务类,程序中使用该类的主要功能是获取Connection对象,该类包含如下方法: publi ...

  2. MySql数据库与JDBC编程二

    DML语法语句:主要操作数据表中的数据,完成插入新数据,修改已有数据,删除不要的数据的任务 1,insert into 语句 用于向指定表插入数据,一次只能插入一条记录:insert into tab ...

  3. MySql数据库与JDBC编程

    JDBC -- Java Database Connectivity,即Java数据库连接,通过使用JDBC就可以使用同一种API访问不同的数据库 SQL语句基础(SQL结构化查询语言) 能完成的任务 ...

  4. 批量备份mysql数据库(shell编程)

    #!/bin/bash DBPATH=/mysqlbak MYUSER=root MYPASS= SOCKET=/var/lib/mysql/mysql.sock MYCMD="mysql ...

  5. MySql数据库与JDBC编程三

    多表连接查询(两种规范 SQL92和SQL99) SQL92规范: 等值连接,非等值连接,外连接,广义笛卡儿积连接 多个表都放在from后,,连接条件放在where后,条件要求两列值相等,则为等值连接 ...

  6. 项目--解决MySQL数据库插入中文乱码

    转载自:http://blog.csdn.net/zzh920625/article/details/51226312 情景再现] 如图,在项目中使用MySQL数据库,在做插入操作时,写入英文字符没有 ...

  7. MySQL数据库服务器的架设

    导读 MySQL数据库是Linux操作系统上用得最多的数据库系统,它可以非常方便的与其它服务器集成在一起,如Apache.Vsftpd.Postfix等.下面介绍RHEL 6平台MySQL数据库服务器 ...

  8. 沃森Mysql数据库修复工具

    华信Mysql数据库修复程序是由北京华信数据恢复中心独立研发.主要针对Mysql数据库损坏的恢复. 本程序可用于因为各种误操作而导致数据丢失的恢复,以及因为断电.陈列损坏.硬盘坏道等各种原因导致数据库 ...

  9. 在控制台使用MySQL数据库

    本篇内容介绍的是如何在控制台下使用MySQL数据库.首先需要安装MySQL数据库应用程序,然后找到MySql的Command Line Client进入之后你会看到,此处需要正确输入密码,否则会直接退 ...

随机推荐

  1. 「洛谷5283」「LOJ3048」「十二省联考2019」异或粽子【可持久化01trie+优先队列】

    题目链接 [洛谷传送门] [LOJ传送门] 题目大意 让你求区间异或和前\(k\)大的异或和的和. 正解 这道题目是Blue sky大佬教我做的(祝贺bluesky大佬进HA省A队) 我们做过某一些题 ...

  2. 764. Largest Plus Sign

    题目大意: 就是一个由1和0组成的正方形矩阵,求里面最大的加号的大小,这个大小就是长度. 什么鬼啊,本来想自己想的,结果看了半天没看懂具体什么意思,然后查了下题解,希望有人说一下意思,结果一上来就是思 ...

  3. js jquery radio 选中 选中值

    radio示例: <label><input type="radio" name="type" id="type" val ...

  4. 遍历HTML DOM 树

    <!-- NodeIterator --> <!DOCTYPE html> <html> <head> <meta charset="u ...

  5. Vue学习(4)

    昨天内容回顾 1.{{}}模板语法.插值.简单运算2.指令系统 v-if 真正销毁重建 v-show 更改css的display,用于重复切换出现 v-bind 绑定属性 : v-on 绑定事件 @ ...

  6. 在windows中把一个文件夹打成war包

    转: 在windows中把一个文件夹打成war包 一般开发打war包时都是用MyEclipse或IntelliJ IDEA等直接导出war文件,这里介绍一种如何把一个文件夹打成war包的方式,如下   ...

  7. CentOS 添加新的硬盘之后不停机操作

    echo "- - -" > /sys/class/scsi_host/host0/scan echo "- - -" > /sys/class/s ...

  8. 2017-12-15python全栈9期第二天第五节之格式化输出补充之想要在格式化输出中表示单纯的%号就加%

    #!/user/bin/python# -*- coding:utf-8 -*-name = input('姓名:')age = input('年龄:')height = input('身高:')ms ...

  9. saltstack returners

    大意就是将saltstack 执行的结果,不在终端显示,写到文件或者数据库,功能类似于ansible的callback 参考 https://github.com/saltstack/salt/tre ...

  10. Hadoop生态圈-使用FreeIPA安装Kerberos和LDAP

    Hadoop生态圈-使用FreeIPA安装Kerberos和LDAP 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 有些大数据平台只是简单地通过防火墙来解决他们的网络安全问题.十分 ...