?? use_mysql.c
字號:
/*********************************************************
* get_out_mysql.c
*
* Mon Sep 18 16:57:49 2006
* Copyright 2006 Spark Zheng
* mwishes_1014@sina.com.cn
*********************************************************/
#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結構,具體有什么作用現在還不懂
{
syslog(LOG_USER|LOG_INFO,"初始化MYSQL出錯.\n");//syslog是向系統日志中寫東西
exit(1);
}
if (!mysql_real_connect(&mysql,HOST,USER,PASSWORD,DATABASE,0,NULL,0))//連接數據庫
{
printf(/*iLOG_USER|LOG_INFO, */"打開數據庫出錯: %s\n",
mysql_error(&mysql));
exit(1);
}
else
{
printf(/*syslog(LOG_USER|LOG_INFO,*/ "連接上數據庫,等待操作:\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";// 數據庫post1中的一個表
char *mesg_name ="*";// 和上面一句都是為了下面的sql語句服務的
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);//將第二個參數中的值格式化輸入第一個參數,
printf("%s.\n",sel_statement);
// printf("jiu zai zhe li\n");
if(mysql_real_query(&mysql,sel_statement,(unsigned int)strlen(sel_statement)) != 0)//執行sql語句
{
printf(/* syslog(LOG_USER|LOG_INFO,*/"Mysql查詢出錯:%s\n",
mysql_error(&mysql));
exit(2);
}
if((m_res = mysql_store_result(&mysql)) == NULL)//將sql語句的查詢結果保存到一個mysql_res結構中
{
printf(/* syslog(LOG_USER|LOG_INFO,*/"Mysql獲取出錯:%s\n",
mysql_error(&mysql));
exit(2);
}
row_num = mysql_num_rows(m_res);//查看結果集合中的行數
printf("Now fetch %d rows \n",row_num);
int j=0;
while( m_fd = mysql_fetch_field(m_res) )//返回作為一個MYSQL_FIELD結構的一個結果集合的一個列的定義
{
printf("%s\t",m_fd->name);
j++;//這個j只是為下面的while語句循環結束提供參數,由于這個while中每次只讀到一個列,所以j的值,就是此表的列數,下面的while循環j次(0到j-1),剛好打印出每行的所有值。
}
printf("\n");
int i = 0;
while((m_row = mysql_fetch_row(m_res)))//檢索一個結果集合的下一行
{
i=0;
while(i<j)//j的數值是該表的列數
{
printf("%s\t",m_row[i]);//執行這個循環就可以將表中的這一行全部打印出來
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()等為一個結果集合分配的內存
free(sel_statement);//釋放malloc函數分配的內存
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -