亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1802 | 回復(fù): 1
打印 上一主題 下一主題

【分享】一個調(diào)用mysql的程序 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-03-01 13:16 |只看該作者 |倒序瀏覽
本帖最后由 chinafenghao 于 2013-03-04 08:58 編輯

一個調(diào)用mysql的程序
一個用到mysql的程序,用以學(xué)習(xí)mysql函數(shù),程序如下所示:
/*********************************************************
*           get_out_mysql.c
*
*  Mon Sep 18 16:57:49 2006
* Copyright  2006  Spark Zheng
*********************************************************/
#include< stdio.h>
#include< stdlib.h>
#include< ctype.h>
#include< strings.h>
#include< unistd.h>
#include< syslog.h>
//#include< mysql/mysql.h>
#include "/usr/include/mysql/mysql.h"
#define HOST "localhost"
#define USER "root"
#define PASSWORD "chenjie"
#define DATABASE "post1"
void mysql_handle();
void mysql_exit();
MYSQL mysql;
int main(int argc,char **argv)
{
  if(mysql_init(&mysql)== NULL)//初始化mysql結(jié)構(gòu),具體有什么作用現(xiàn)在還不懂
  {
           syslog(LOG_USER|LOG_INFO,"初始化MYSQL出錯.\n");//syslog是向系統(tǒng)日志中寫東西
             exit(1);
            
}
   
    if (!mysql_real_connect(&mysql,HOST,USER,PASSWORD,DATABASE,0,NULL,0))//連接數(shù)據(jù)庫
   {
                printf(/*iLOG_USER|LOG_INFO, */"打開數(shù)據(jù)庫出錯: %s\n",
                       mysql_error(&mysql));
          exit(1);
    }
   else
        {
          printf(/*syslog(LOG_USER|LOG_INFO,*/ "連接上數(shù)據(jù)庫,等待操作:\n");
      }
   
    mysql_handle();
     
    mysql_exit();
      
    return 0;
}
void mysql_exit()
{
        mysql_close(&mysql);
}
void mysql_handle()
{
       MYSQL_RES *m_res;
   MYSQL_ROW m_row;
    MYSQL_FIELD *m_fd;
//        char *sort_dbname = "";
//   char *sort_name = "";
       char *mesg_dbname ="test";// 數(shù)據(jù)庫post1中的一個表
     char *mesg_name ="*";// 和上面一句都是為了下面的sql語句服務(wù)的
   char *sel_statement;
        int row_num = 0;
        sel_statement = (char*)malloc(75*sizeof(char));
     
    sprintf(sel_statement,"select %s from %s",mesg_name,mesg_dbname);//將第二個參數(shù)中的值格式化輸入第一個參數(shù),
   printf("%s.\n",sel_statement);
//  printf("jiu zai zhe li\n");  
   if(mysql_real_query(&mysql,sel_statement,(unsigned int)strlen(sel_statement)) != 0)//執(zhí)行sql語句
     {
         printf(/*  syslog(LOG_USER|LOG_INFO,*/"Mysql查詢出錯:%s\n",
           mysql_error(&mysql));
             exit(2);
    }
   
    if((m_res = mysql_store_result(&mysql)) == NULL)//sql語句的查詢結(jié)果保存到一個mysql_res結(jié)構(gòu)中
        {
        printf(/*   syslog(LOG_USER|LOG_INFO,*/"Mysql獲取出錯:%s\n",
           mysql_error(&mysql));
             exit(2);
    }
       row_num = mysql_num_rows(m_res);//查看結(jié)果集合中的行數(shù)
    printf("Now fetch %d rows \n",row_num);
int j=0;
while( m_fd = mysql_fetch_field(m_res) )//返回作為一個MYSQL_FIELD結(jié)構(gòu)的一個結(jié)果集合的一個列的定義
    {
          printf("%s\t",m_fd->name);
          j++;
       }
   printf("\n");
   int i = 0;
  while((m_row = mysql_fetch_row(m_res)))//檢索一個結(jié)果集合的下一行
     {
           i=0;
               while(i<j)//j的數(shù)值是該表的列數(shù)
               {
                  printf("%s\t",m_row);//執(zhí)行這個循環(huán)就可以將表中的這一行全部打印出來
                    i++;
                }
           printf("over one \n");
      }
       if (mysql_errno(&mysql))
        {
       printf(/*    syslog(LOG_USER|LOG_INFO,*/"Mysql出錯:%s\n",mysql_error(&mysql));
         exit(2);
    }
       mysql_free_result(m_res);//釋放由mysql_store_result()、mysql_use_result()等為一個結(jié)果集合分配的內(nèi)存
       free(sel_statement);//釋放malloc函數(shù)分配的內(nèi)存
}
源文件就在此文件夾中,可以試運行。
其中,我用mysql建了個數(shù)據(jù)庫,名為post1,其中只有一個表test,另外,mysql的用戶名和密碼分別是:“root”、“chenjie”,此程序的功能就是讀取數(shù)據(jù)庫post1中的表test的內(nèi)容,并將其打印出來。
以下詳述此程序在gdb中顯示的每一步的輸出。
①處為初始化一個mysql結(jié)構(gòu),一般來說,這個結(jié)構(gòu)包含了有關(guān)mysql的各種信息,具體功能現(xiàn)在還不了解。
②處即連接數(shù)據(jù)庫。
③處即將前面導(dǎo)入sel_statement的那句sql語句執(zhí)行,此處即為查詢數(shù)據(jù)庫post1中的表test的內(nèi)容。
④處即將查詢的結(jié)果保存到一個mysql_res的結(jié)構(gòu)中,這個結(jié)構(gòu)中也有很多量,現(xiàn)在其究竟為什么意思,還是不太明白。
⑤處每調(diào)用一次(即while)每循環(huán)一次都返回結(jié)果集合中的一個列的定義,將其保存在一個mysql_fd的結(jié)構(gòu)中,這個結(jié)構(gòu)中包含很多量,將這一列的所有信息全部包含了,再次調(diào)用就返回下一列的信息,直到所有列的信息全部返回完后,最后一次返回NULL,此時while循環(huán)結(jié)束。在mysql參考手冊中,這個函數(shù)是這樣介紹的:“返回作為一個MYSQL_FIELD結(jié)構(gòu)的一個結(jié)果集合的一個列的定義。重復(fù)調(diào)用這個函數(shù)在結(jié)果集合中檢索所有關(guān)于列的信息。當(dāng)沒有剩下更多的字段時,mysql_fetch_field()返回NULL!钡牵空{(diào)用一次,mysql_fd結(jié)構(gòu)中的數(shù)據(jù)就被改變了,所以要調(diào)用一次,打印一次,同時,調(diào)用多少次,就說明test表中有多少個列,這里設(shè)定一個j也就是這個作用,作為下面的while循環(huán)的循環(huán)次數(shù)。
⑥處的mysql_fetch_row(m_res)函數(shù)在mysql手冊中的介紹是:“檢索一個結(jié)果集合的下一行。當(dāng)在mysql_store_result()之后使用時,如果沒有更多的行可見所時,mysql_fetch_row()返回NULL。”它執(zhí)行一次,就檢索到了查詢結(jié)果集合的一行,而其內(nèi)層的while循環(huán),每次打印一個值,循環(huán)j次,就能夠?qū)⑦@一行打印完,執(zhí)行外層while循環(huán),每循環(huán)一次就打印一行,執(zhí)行結(jié)束后,所有的查詢結(jié)果就都被打印出來了。
查看原文:原文鏈接

論壇徽章:
4
CU大;照
日期:2013-03-13 15:32:35CU大;照
日期:2013-03-13 15:38:15CU大;照
日期:2013-03-13 15:38:52戌狗
日期:2013-12-27 15:08:11
2 [報告]
發(fā)表于 2013-03-01 13:45 |只看該作者
描述的太多了 簡單點問題
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP