• MySQL 数据库应用程序编程


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

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

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

      1 #include <Windows.h>
      2 #include <stdio.h>
      3 #include <stdlib.h>
      4 #include <tchar.h>
      5 #include <assert.h>
      6 #include <C:Program FilesMySQLMySQL Connector C 6.1includemysql.h>
      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("数据库连接状态:
    "
     14         "%s
    ", 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("创建失败!
    "
     22             "%d: %s
    ", mysql_errno(mysql), mysql_error(mysql));
     23     } else {
     24         printf("创建成功!
    ");
     25     }
     26 
     27     // 选择数据库
     28     sprintf(cmd, "USE `my_test_db`");
     29     if (mysql_query(mysql, cmd) != EXIT_SUCCESS) {
     30         printf("选择失败!
    "
     31             "%d: %s
    ", mysql_errno(mysql), mysql_error(mysql));
     32         return ;
     33     } else {
     34         printf("选择了表!
    ");
     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("创建失败!
    "
     45             "%d: %s
    ", 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("查看失败!
    "
     53             "%d: %s
    ", 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("查询没有返回结果
    ");
     63         } else {
     64 
     65             int fc = mysql_field_count(mysql);
     66             printf("字段数量: %u.
    ", 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	", row[i] != NULL ? row[i] : "NULL");
     73                 }
     74                 printf("
    ");
     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("连接失败!
    ");
     91         printf("%d: %s
    ", 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("
    "
    112         "The end.
    ");
    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 }    

    第一次运行:

    再次运行:

  • 相关阅读:
    动态类型
    unlink与close关系
    Google 历年笔试面试30题
    UNIX网络编程 卷2 源代码使用
    centos安装telnet
    python中安装第三方模块
    Linux平台 Oracle 18c RAC安装Part1:准备工作
    RHEL7 配置iSCSI模拟环境
    Solaris 10主机名和IP地址步骤
    设置sqlplus不显示除查询结果外的信息
  • 原文地址:https://www.cnblogs.com/develon/p/9066333.html
Copyright © 2020-2023  润新知