📄 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 + -