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
關鍵:-lmysqlclient 連結官方客戶端庫,其餘為 SCO 系統常用庫。
#include <stdio.h>
#include </usr/local/mysql/include/mysql.h>
#define DBCFG "./gsp.conf"
int 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; // 64位無號長整數,用於行數、影響行數
// 從設定檔讀取連線參數
getfileargv(DBCFG, "DBHOST", dbhost);
getfileargv(DBCFG, "DBUSER", dbuser);
getfileargv(DBCFG, "DBPASSWD", dbpasswd);
getfileargv(DBCFG, "DATABASE", db);
// 初始化 MYSQL 結構
if (!(mysql = mysql_init(NULL))) {
fprintf(stderr, "mysql_init 失敗!\n");
return 1;
}
// 真實連線
if (!mysql_real_connect(mysql, dbhost, dbuser, dbpasswd, db, 0, NULL, 0)) {
fprintf(stderr, "連線伺服器失敗: %s\n", mysql_error(mysql));
mysql_close(mysql);
return 1;
}
// 執行查詢
strcpy(query, "select * from zuh where jgm='11110501' order by zuh");
if (mysql_query(mysql, query)) {
fprintf(stderr, "查詢失敗: %s\n", mysql_error(mysql));
mysql_close(mysql);
return 1;
}
// 取得完整結果集(緩衝模式)
mysql_res = mysql_store_result(mysql);
rows = mysql_num_rows(mysql_res);
if (rows == 0) {
printf("查無資料\n");
mysql_free_result(mysql_res);
mysql_close(mysql);
return 0;
}
// 逐行取出並列印
for (count = 0; count < rows; count++) {
mysql_row = mysql_fetch_row(mysql_res);
printf("社號:%s 組號:%s 組名:%s\n", mysql_row[0], mysql_row[1], mysql_row[2]);
}
// 釋放資源
mysql_free_result(mysql_res);
mysql_close(mysql);
return 0;
}
#include <stdio.h>
#include <string.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(retbuf, strchr(line, '=') + 1);
return 0;
}
}
fclose(fp);
return -2; // 找不到
}
DBHOST=127.0.0.1
DBUSER=root
DBPASSWD=secret
DATABASE=testdb
make clean && make
./gj
pkg-config --cflags --libs mysqlclient 取得編譯連結參數。/usr/include/mysql。mysql_error(mysql) 取得詳細訊息。