#include

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

mysql基礎(chǔ):mysql與C結(jié)合實(shí)例

系統(tǒng) 2279 0

一個(gè)簡(jiǎn)單的mysql與C的交互,使用了一些mysql的C API!

老鳥(niǎo)掠過(guò),新手能夠看看!


      /******************************************
  本文件學(xué)習(xí)mysql的database使用
  學(xué)習(xí)mysql的C接口
  包括初始化db,檢查數(shù)據(jù)庫(kù)是否存在,不存在就創(chuàng)建。
  檢查表是否存在,不存在則創(chuàng)建
 *****************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//須要包括mysql的頭文件,/usr/include/mysql/
//編譯的時(shí)候須要加上-L/usr/lib/ -lmysqlclient -I/usr/include/mysql選項(xiàng)

#include <mysql.h> //主要的頭文件,一些重要結(jié)構(gòu)體的聲明
#include <errmsg.h>//錯(cuò)誤信息的存放
#include <mysql_version.h>  //包括當(dāng)前mysql的版本號(hào)信息
//////////////////所有變量,宏定義//////////////////////
#define DEBUG
#define SERVER_HOST "localhost"  //mysql的遠(yuǎn)程地址
#define SERVER_USER "root"      //數(shù)據(jù)庫(kù)登錄名
#define SERVER_PWD  "123"  //數(shù)據(jù)庫(kù)登錄password

#define DB_NAME     "tmp_db"    //新建數(shù)據(jù)庫(kù)的名字
#define TABLE_NAME  "mytables"  //庫(kù)中的表

int check_tbl(MYSQL* mysql,char *name);
int check_db(MYSQL *mysql,char *db_name);

int init_db()
{

    int err=0;
    MYSQL mysql;

    if(!mysql_init(&mysql)){
        perror("mysql_init:");
        exit(1);
    }   

    if(!mysql_real_connect(&mysql,SERVER_HOST,SERVER_USER,SERVER_PWD,NULL,0,NULL,0))
    {   
        perror("mysql_real_connect");
        exit(1);
    }   
    printf("connected.....\n");

    err = check_db(&mysql,DB_NAME);
    if(err != 0)
    {   
        printf("create db is err!\n");
        mysql_close(&mysql);
        exit(1);
    }   
    //select which db
	    if(mysql_select_db(&mysql,DB_NAME)) //return 0 is success ,!0 is err
    {
        perror("mysql_select_db:");
        mysql_close(&mysql);
        exit(1);
    }
    //chuangjianbiao
    if((err=check_tbl(&mysql,TABLE_NAME))!=0)
    {
        printf("check_tbl is err!\n");
        mysql_close(&mysql);
        exit(1);
    }
    mysql_close(&mysql);
    return 0;
}

int check_db(MYSQL *mysql,char *db_name)
{
    MYSQL_ROW row = NULL;
    MYSQL_RES *res = NULL;

    res = mysql_list_dbs(mysql,NULL);
    if(res)
    {
        while((row = mysql_fetch_row(res))!=NULL)
        {
            printf("db is %s\n",row[0]);
            if(strcmp(row[0],db_name)==0)
            {
                printf("find db %s\n",db_name);
                break;
            }
        }
        //mysql_list_dbs會(huì)分配內(nèi)存,須要使用mysql_free_result釋放
        mysql_free_result(res);
    }
    if(!row)  //沒(méi)有這個(gè)數(shù)據(jù)庫(kù),則建立
    {
        char buf[128]={0};
        strcpy(buf,"CREATE DATABASE ");
        strcat(buf,db_name);
#ifdef DEBUG
        printf("%s\n",buf);
#endif
        if(mysql_query(mysql,buf)){
            fprintf(stderr,"Query failed (%s)\n",mysql_error(mysql));
            exit(1);
        }
    }
    return 0;
}

int check_tbl(MYSQL* mysql,char *name)
{
    if(name == NULL)
        return 0;
    MYSQL_ROW row=NULL;
    MYSQL_RES *res = NULL;
    res = mysql_list_tables(mysql,NULL);
    if(res)
    {
        while((row = mysql_fetch_row(res))!=NULL)
        {
            printf("tables is %s\n",row[0]);
            if(strcmp(row[0],name) == 0)
            {
                printf("find the table !\n");
                break;
            }
        }
        mysql_free_result(res);
    }
    if(!row) //create table
    {
        char buf[128]={0};
        char qbuf[128]={0};
        snprintf(buf,sizeof(buf),"%s (name VARCHAR(20),sex char(1),score int(3));",TABLE_NAME);
        strcpy(qbuf,"CREATE TABLE ");
        strcat(qbuf,buf);
//#ifdef DEBUG
        printf("%s\n",qbuf);
//#endif
        if(mysql_query(mysql,qbuf)){
            fprintf(stderr,"Query failed (%s)\n",mysql_error(mysql));
            exit(1);
        }
    }
    return 0;
}

int main()
{
    int err=0;
    err = init_db();

    return 0;
}

    

編譯的方法:最后的-I一定要注意檢查這個(gè)文件夾是不是存在,否則會(huì)報(bào)錯(cuò)

      gcc -o mysql mysql.c -L/usr/lib/ -lmysqlclient -I/usr/include/mysql
    

報(bào)錯(cuò):

      root@jack-desktop:~# gcc -o mysql mysql.c -L/usr/lib/ -lmysqlclient
gcc: mysql.c: 沒(méi)有那個(gè)文件或文件夾
root@jack-desktop:~# 
root@jack-desktop:~# 
root@jack-desktop:~# cd myc/
root@jack-desktop:myc# gcc -o mysql mysql.c -L/usr/lib/ -lmysqlclient
mysql.c:15:73: error: mysql.h: 沒(méi)有那個(gè)文件或文件夾
mysql.c:16:43: error: errmsg.h: 沒(méi)有那個(gè)文件或文件夾
mysql.c:17:63: error: mysql_version.h: 沒(méi)有那個(gè)文件或文件夾
mysql.c:27: error: expected ‘)’ before ‘*’ token
mysql.c:28: error: expected ‘)’ before ‘*’ token
mysql.c: In function ‘init_db’:
mysql.c:34: error: ‘MYSQL’ undeclared (first use in this function)
mysql.c:34: error: (Each undeclared identifier is reported only once
mysql.c:34: error: for each function it appears in.)
mysql.c:34: error: expected ‘;’ before ‘mysql’
mysql.c:36: error: ‘mysql’ undeclared (first use in this function)
mysql.c: At top level:
mysql.c:73: error: expected ‘)’ before ‘*’ token
mysql.c:109: error: expected ‘)’ before ‘*’ token
    



mysql基礎(chǔ):mysql與C結(jié)合實(shí)例


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久久中文字幕2021精品 | 日韩高清毛片 | 狠狠色丁香婷婷久久综合不卡 | 亚洲国产日韩欧美一区二区三区 | 最新国产福利片在线观看 | 精品煌色视频网站在线观看 | 国产伦人伦偷精品视频 | 四虎成人欧美精品在永久在线 | 最近中文2019视频在线 | 国产成人精品免费视频网页大全 | 日韩免费不卡视频 | 亚洲中字在线 | 尹人在线视频 | 欧美福利精品福利视频在线观看 | 婷婷久久精品 | jizz成熟丰满中国妇女 | 亚洲狠狠婷婷综合久久久久图片 | 亚洲欧美日韩中字综合 | 国产区91 | 我爱52av好色 | 深夜福利网站在线 | 香蕉视频亚洲 | 91亚洲精品| 久久精品亚洲综合一品 | 国产欧美精品一区二区三区四区 | 99热这里只有精品1 99热这里只有精品18 | 99视频99 | 99久久精品男女性高爱 | 久久这里只有精品国产 | 日本高清免费不卡在线播放 | 日韩欧美中文字幕一区 | 日本一区二区三区四区五区 | 日韩在线视频在线 | 大ji吧快给我别停受不了视频 | 国产在线19禁免费观看国产 | 青青青爽在线视频观看 | 国产精品久久现线拍久青草 | www.夜夜骑.com | 俺去也理论网站 | 国产在线91精品入口首页 | 亚洲高清视频免费 |