操作系統是Linux,需要mysql客戶端軟件開發庫libmysqlclient,這個函數庫是mysql的組成部分之一。
一般頭文件都在/usr/include/mysql路徑下,庫文件都在/usr/lib/mysql路徑下。
如果沒有需要安裝mysql-devel包(mysql-devel-5.1.47-4.el6.i686.rpm)
[**@**]# rpm -ivh mysql-devel-5.1.47-4.el6.i686.rpm
安裝完成後可以去那兩個路徑下看看有沒有,如果沒有就查找一下
[**@**]# find / -name mysql.h
[**@**]# find / -name mysqlclient
看一下路徑在哪裡。
安裝完成後,就可以編譯連接C源程序了。
[**@**]# gcc -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient *.c
編譯成功即可運行。
解釋下:
gcc GNU C/C++編譯器
-I指定頭文件所在路徑(大寫i)
-L 指定庫文件所在路徑
-l 與所需要的動態鏈接庫鏈接起來(小寫L)
這麼長的編譯命令一般都在make文件裡面寫了
關於動態鏈接庫可以添加一個環境變量
[**@**]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usrlib/mysql
不過一勞永逸的辦法是:將這句話LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usrlib/mysql添加在.bashrc裡面
最後源碼:
[cpp]
#include <stdio.h>
#include <mysql.h>
int main(int argc, char *argv[])
{
int i;
MYSQL *conn; // connection to MySQL server
MYSQL_RES *result; // result of SELECT query
MYSQL_ROW row; // one record (row) of SELECT query
// connect to MySQL
conn = mysql_init(NULL);
// mysql_options(conn, MYSQL_READ_DEFAULT_GROUP, "myclient");
if(mysql_real_connect(
conn, "localhost", "root", "uranus", //此處更改用戶名密碼
"mylibrary", 0, NULL, 0) == NULL) {
fprintf(stderr, "sorry, no database connection ...\n");
return 1;
}
// only if utf8 output is needed
mysql_query(conn, "SET NAMES 'utf8'");
// retrieve list of all publishers in mylibrary
const char *sql="SELECT COUNT(titleID), publName \
FROM publishers, titles \
WHERE publishers.publID = titles.publID \
GROUP BY publishers.publID \
ORDER BY publName";
if(mysql_query(conn, sql)) {
fprintf(stderr, "%s\n", mysql_error(conn));
fprintf(stderr, "Fehlernummer %i\n", mysql_errno(conn));
fprintf(stderr, "%s\n", sql);
return 1;
}
// process results
result = mysql_store_result(conn);
if(result==NULL) {
if(mysql_error(conn))
fprintf(stderr, "%s\n", mysql_error(conn));
else
fprintf(stderr, "%s\n", "unknown error\n");
return 1;
}
printf("%i records found\n", (int)mysql_num_rows(result));
// loop through all found rows
while((row = mysql_fetch_row(result)) != NULL) {
for(i=0; i < mysql_num_fields(result); i++) {
if(row[i] == NULL)
printf("[NULL]\t");
else
printf("%s\t", row[i]);
}
printf("\n");
}
// de-allocate memory of result, close connection
mysql_free_result(result);
mysql_close(conn);
return 0;
}