環境: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
#include
#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
{
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
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;
}