zoukankan      html  css  js  c++  java
  • mysql实际使用思路

    在熟悉mysql语法的基础上,想在自己的应用程序中使用它,应该怎么操作呢?

    自然的想法就是找到相应语言的mysql接口,然后熟悉接口,对其进行调用。

    具体的做法与思路如下:

    1. 找到C的mysql接口
    2. 新建MYSQL对象mysql
    3. 利用接口函数初始化对象 mysql_init(&mysql);
    4. 利用接口将数据库对象与实际数据库建立连接MYSQL *sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0),sock为连接句柄(句柄存放的是如窗口、按钮、图标等实例的内存地址,由于这些内存地址在内存并不是一层不变的,因此WINDOS提出句柄概念,它是一种智能指针,类似户籍管理)
    5. 连接建立成功后就可以对数据库进行操作
    6. 查询mysql_query(sock,sqlbuf);
    7. 存放查询结果 MYSQL_RES *res=mysql_store_result(sock);
    8. 对查询结果进行操作,类似操作数据库中表,操作以行为单位进行,mysql_num_fields(res)可得行数, MYSQL_ROW row= mysql_fetch_row(res)得到每行的内容
    9. 操作完结果后,将其从内存中释放,mysql_free_result(res);
    10. 最后关闭数据库句柄mysql_close(sock);完成对数据库的操作

    具体实际代码如下:

    下面这段代码实现了连接到本地MySQL服务器上9tmd_bbs_utf8数据库,从数据表tbb_user中根据输入的userid取得该用户的用户名并打印输出到终端。

    #if defined(_WIN32) || defined(_WIN64) //为了支持windows平台上的编译
    #include <windows.h>
    #endif
    #include <stdio.h>
    #include <stdlib.h>
    #include "mysql.h"  //我的机器上该文件在/usr/local/include/mysql下
     
    //定义数据库操作的宏,也可以不定义留着后面直接写进代码
    #define SELECT_QUERY "select username from tbb_user where userid = %d"
     
    int main(int argc, char **argv) //char **argv 相当于 char *argv[]
    {
        MYSQL mysql,*sock;    //定义数据库连接的句柄,它被用于几乎所有的MySQL函数
        MYSQL_RES *res;       //查询结果集,结构类型
        MYSQL_FIELD *fd ;     //包含字段信息的结构
        MYSQL_ROW row ;       //存放一行查询结果的字符串数组
        char qbuf[160];      //存放查询sql语句字符串
        
        if (argc != 2) { //检查输入参数
            fprintf(stderr,"usage : mysql_select <userid>
    
    ");
            exit(1);
        }
        
        mysql_init(&mysql);
        if (!(sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))) {
            fprintf(stderr,"Couldn't connect to engine!
    %s
    
    ",mysql_error(&mysql));
            perror("");
            exit(1);
        }
        
        sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));
        if(mysql_query(sock,qbuf)) {
            fprintf(stderr,"Query failed (%s)
    ",mysql_error(sock));
            exit(1);
        }
        
        if (!(res=mysql_store_result(sock))) {
            fprintf(stderr,"Couldn't get result from %s
    ", mysql_error(sock));
            exit(1);
        }
        
        printf("number of fields returned: %d
    ",mysql_num_fields(res));
            
        while (row = mysql_fetch_row(res)) {
            printf("Ther userid #%d 's username is: %s
    ", atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0])) ; 
            puts( "query ok !
    " ) ; 
        } 
        
        mysql_free_result(res);
        mysql_close(sock);
        exit(0);
        return 0;   //. 为了兼容大部分的编译器加入此行
    }
    View Code

    编译的时候,使用下面的命令

    gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 后面两个选项可选,根据您的环境情况

    运行的时候,执行下面的命令

    ./mysql_select 1

    将返回如下结果:

    number of fields returned: 1
    Ther userid #1 's username is: Michael
    query ok !
     
    C与mysql实例如上,其它语言也都大同小异,比如python与mysql,python针对mysql没有接口,因为它的数据库接口是面象sql,mysql,oracle通用接口。
    在用到事务时,要
    1. 注意事务的四个特性,原子、一致性、隔离、永久性。
    2. 在代码中体现在,关闭自动提交功能,
    3. 所有数据库操作完成之后要commit或rollback,并注意抛出异常,
    4. 数据库引擎要用innodb,因为它支持事务并支持外来键,而MYISAM、ISAM不支持外来键和事务操作,它们优势是ISAM针对数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源;MYISAM在ISAM基础上快速读取操作,适合WEB项目,缺陷就是不能在表损坏后恢复数据;
  • 相关阅读:
    RAND函数和SRAND函数
    称丢手帕问题
    用GDB调试程序(七)
    用GDB调试程序(六)
    用GDB调试程序(三)
    用GDB调试程序(五)
    用GDB调试程序(二)
    用GDB调试程序(一)
    SOAP 简单对象访问协议
    关于angularJS绑定数据时自动转义html标签
  • 原文地址:https://www.cnblogs.com/etwd/p/4741792.html
Copyright © 2011-2022 走看看