在SCO下用gcc编译调用mysql数据库的一个小程序
2007-11-11 15:49:33 来源:WEB开发网环境:SCO OpenServer 5.0.6, MySQL(和PHP搭配之最佳组合) 3.23.42,gcc 2.95.2
备注:gcc已集成了支持MySQL(和PHP搭配之最佳组合)的函数,可以在C源代码中直接调用数据库,不用像informix那样要用ESQL/C嵌入调用.
1.makefile文件
CC=gcc
LIB=-lcurses -lsocket -lMySQL(和PHP搭配之最佳组合)client -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(和PHP搭配之最佳组合)/include/MySQL(和PHP搭配之最佳组合).h>
#define DBCFG "./gsp.conf"
main()
{
char dbhost[32],dbuser[16],dbpasswd[16],db[16];
char query[256];
int count;
MySQL(和PHP搭配之最佳组合) * MySQL(和PHP搭配之最佳组合); /*表示对一个数据库连接的句柄*/
MySQL(和PHP搭配之最佳组合)_RES *MySQL(和PHP搭配之最佳组合)_res; /*代表返回行的一个查询的结果*/
MySQL(和PHP搭配之最佳组合)_ROW MySQL(和PHP搭配之最佳组合)_row; /*字符串数组*/
my_ulonglong rows;
/*该类型用于行编号和MySQL(和PHP搭配之最佳组合)_affected_rows()、MySQL(和PHP搭配之最佳组合)_num_rows()和MySQL(和PHP搭配之最佳组合)_insert_id()
*/
getfileargv(DBCFG,"DBHOST",dbhost); /*从文件中读取gsp.conf*/
getfileargv(DBCFG,"DBUSER",dbuser);
getfileargv(DBCFG,"DBPASSWD",dbpasswd);
getfileargv(DBCFG,"DATABASE",db);
if(!(MySQL(和PHP搭配之最佳组合)=MySQL(和PHP搭配之最佳组合)_init(NULL))) /*获得或初始化一个MySQL(和PHP搭配之最佳组合)结构*/
{
printf("MySQL(和PHP搭配之最佳组合)_init失败!");
MySQL(和PHP搭配之最佳组合)_close(MySQL(和PHP搭配之最佳组合));
exit(0);
}
if(!MySQL(和PHP搭配之最佳组合)_real_connect(MySQL(和PHP搭配之最佳组合),dbhost,dbuser,dbpasswd,db,0,NULL,0))
{ /*连接一个MySQL(和PHP搭配之最佳组合)服务器*/
printf("连接服务器失败,请联系系统管理人员!");
MySQL(和PHP搭配之最佳组合)_close(MySQL(和PHP搭配之最佳组合));
exit(0);
}
strcpy(query,"select * from zuh where jgm=\"11110501\" order by zuh");
if(MySQL(和PHP搭配之最佳组合)_query(MySQL(和PHP搭配之最佳组合),query)) /*执行指定为一个空结尾的字符串的SQL查询*/
{
printf("MySQL(和PHP搭配之最佳组合)_query出错!");
MySQL(和PHP搭配之最佳组合)_close(MySQL(和PHP搭配之最佳组合));
exit(0);
}
MySQL(和PHP搭配之最佳组合)_res=MySQL(和PHP搭配之最佳组合)_store_result(MySQL(和PHP搭配之最佳组合)); /*检索一个完整的结果集合给客户*/
rows=MySQL(和PHP搭配之最佳组合)_num_rows(MySQL(和PHP搭配之最佳组合)_res); /*返回一个结果集合重的列的数量*/
if(rows==0) /*此管理码不存在 返回*/
{
printf("返回值为空");
MySQL(和PHP搭配之最佳组合)_free_result(MySQL(和PHP搭配之最佳组合)_res); /*释放一个结果集合使用的内存*/
MySQL(和PHP搭配之最佳组合)_close(MySQL(和PHP搭配之最佳组合)); /*关闭一个服务器连接*/
exit(0);
}
for(count=0; count<rows; count++)
{
MySQL(和PHP搭配之最佳组合)_row=MySQL(和PHP搭配之最佳组合)_fetch_row(MySQL(和PHP搭配之最佳组合)_res); /*从结果集合中取得下一行*/
printf("社号:%s ",MySQL(和PHP搭配之最佳组合)_row[0]);
printf("组号:%s ",MySQL(和PHP搭配之最佳组合)_row[1]);
printf("组名:%s\n",MySQL(和PHP搭配之最佳组合)_row[2]);
}
MySQL(和PHP搭配之最佳组合)_free_result(MySQL(和PHP搭配之最佳组合)_res);
MySQL(和PHP搭配之最佳组合)_close(MySQL(和PHP搭配之最佳组合));
}
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;
}
更多精彩
赞助商链接