|   环境:SCO OpenServer 5.0.6, mysql 3.23.42,gcc 2.95.2
 备注:gcc已集成了支持mysql的函数,可以在C源代码中直接调用数据库,不用像informix那样要用ESQL/C嵌入调用.
 
 1.makefile文件
   CC=gcc
 LIB=-lcurses -lsocket -lmysqlclient -lm -lc -lnsl
 
 all:gspser
 
 gspser:get_data.o getfileargv.o
 
 $(CC) -o gj get_data.o getfileargv.o $(LIB)
 
 get_data.o:get_data.c
 
 $(CC) -c get_data.c
 
 getfileargv.o:getfileargv.c
 
 $(CC) -c getfileargv.c
 
 clean:
 
 rm -f *.o
 
 2.get_data.c文件
 
 #include <stdio.h>
 #include </usr/local/mysql/include/mysql.h>
 #define DBCFG "./gsp.conf"
 
 main()
 {
 char dbhost[32],dbuser[16],dbpasswd[16],db[16];
 char query[256];
 int count;
 
 MYSQL * mysql; /*表示对一个数据库连接的句柄*/
 MYSQL_RES *mysql_res; /*代表返回行的一个查询的结果*/
 MYSQL_ROW mysql_row; /*字符串数组*/
 
 my_ulonglong rows;
 
 /*该类型用于行编号和mysql_affected_rows()、mysql_num_rows()和mysql_insert_id()
 */
 
 getfileargv(DBCFG,"DBHOST",dbhost); /*从文件中读取gsp.conf*/
 getfileargv(DBCFG,"DBUSER",dbuser);
 getfileargv(DBCFG,"DBPASSWD",dbpasswd);
 getfileargv(DBCFG,"DATABASE",db);
 
 if(!(mysql=mysql_init(NULL))) /*获得或初始化一个MYSQL结构*/
 {
 printf("mysql_init失败!");
 mysql_close(mysql);
 exit(0);
 }
 
 if(!mysql_real_connect(mysql,dbhost,dbuser,dbpasswd,db,0,NULL,0))
 {
 /*连接一个MySQL服务器*/
 printf("连接服务器失败,请联系系统管理人员!");
 mysql_close(mysql);
 exit(0);
 }
 
 strcpy(query,"select * from zuh where jgm=\"11110501\" order by zuh");
 
 if(mysql_query(mysql,query)) /*执行指定为一个空结尾的字符串的SQL查询*/
 {
 printf("mysql_query出错!");
 mysql_close(mysql);
 exit(0);
 }
 
 mysql_res=mysql_store_result(mysql); /*检索一个完整的结果集合给客户*/
 rows=mysql_num_rows(mysql_res); /*返回一个结果集合重的列的数量*/
 
 if(rows==0) /*此管理码不存在 返回*/
 {
 printf("返回值为空");
 mysql_free_result(mysql_res); /*释放一个结果集合使用的内存*/
 mysql_close(mysql); /*关闭一个服务器连接*/
 exit(0);
 }
 
 for(count=0; count<rows; count++)
 {
 mysql_row=mysql_fetch_row(mysql_res); /*从结果集合中取得下一行*/
 printf("社号:%s ",mysql_row[0]);
 printf("组号:%s ",mysql_row[1]);
 printf("组名:%s\n",mysql_row[2]);
 }
 
 mysql_free_result(mysql_res);
 mysql_close(mysql);
 }
 
 3.getfileargv.c文件
   #include <stdio.h>
 int getfileargv(const char * filename,const char * argvname, char * retbuf)
 {
 FILE *fp;
 char line[128];
 char tempbuf[40];
 strncpy(tempbuf,argvname,30);
 tempbuf[39]=0;
    if ((fp=fopen(filename,"r"))==NULL)  --return -1;
 
 strcat(tempbuf,"=");
 
 while(fgets(line,120,fp))
 {
 if(line[0]=='#')
 continue;
 
 if (!strncmp(line,tempbuf,strlen(tempbuf)))
 {
 fclose(fp);
 
 line[strlen(line)-1]=0;
 
 strcpy(line,(char *)(strchr(line,'=')+1));
 strcpy(retbuf,line);
 
 return 0;
 }
 }
 
 fclose(fp);
 return -2;
 }
 原文链接: http://publish.it168.com/2005/1104/20051104002001.shtml
   |