MySQL C API的一次調用體驗

來源:互聯網
上載者:User

Mysql提供了標準的c API,

要引用進去,需要安裝mysql-devel包,在centos下,我直接yum install mysql-devel,結果恰好應為重新設定過yum源,下載過程中總是提示GPG key error;google的結果是:如果你的YUM是透過代理來訪問CentOS的更新源的話,有可能出現如下錯誤:
GPG key retrieval failed ...
原因可能是GPG key檔案中有一些http協議中的控制字元。
其實,你可以在某一個更新源上下載一個RPM-GPG-KEY-CentOS
# wget http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5
# rpm --import RPM-GPG-KEY-CentOS-5

 

運行後,果然非常OK了,安裝完mysql-devel後,在/usr/include/mysql下可發現mysql的標頭檔,/usr/lib/mysql下可以發現mysql的庫檔案;這是我們編譯和串連所需要的。

用mysql資料庫內建的test資料庫來測試一下吧:

首先我在mysql的test庫中建立了一個table T1 ;

create table T1(id int(11) default NULL, name varchar(100) default NULL);

插入兩條臨時資料:

insert into T1 (id,name) values(“1001”,“the grade is good!”);

insert into T1 (id,name) values(“1002”,  “the grade is good also!”);

查看錶結構:

desc T1;

或者show columns from t1;

接下來我們來使用輪子吧,大概是嘲諷吧,大家都喜歡把類庫稱為輪子,這個輪子真有點大,我們來看下吧!

#include <mysql.h>
#include <stdio.h>
#include <string.h>

int main() {

MYSQL mysql; //need a instance to init
MYSQL_RES *res;
MYSQL_ROW row;
char *query;
int t,r;
//connect the database
mysql_init_($mysql);
if(!mysql_real_connect(&mysql,"localhost","","","test",0,NULL,0))
{
   printf("Error connecting to database:%s\n", mysql_error($mysql));
}
else
printf("Connected ..\n");
//get the result from the executing select query
query = "select * from t1";
t = mysql_real_query(&mysql,query,(unsigned int)strlen(query));
if(t)
{
  printf("Error making query:%s\n",mysql_error(&mysql);
}
else
printf("[%s] made..\n",query);
res = mysql_store_result(&mysql);
while(row = mysql_fetch_row(res))
{
   for(t=0;t<mysql_num_fields(res);t++)
   {
    printf("%s",row[t]);
    }
    printf("\n");
}

printf("mysql_free_result...\n");
mysql_free_result(res);//free result after you get the result
sleep(1);

mysql_close(&mysql);

return 0;
}

 

期間當然出來不少問題了,比如mysql的執行個體是一個引用變數,常常會忽略,或者誤寫為%,還有,strlen函數從屬於string.h的標頭檔,我一直誤認為是在stdio.h中,呵呵,手生的很呢

最重要的時候到了,呵呵,自然是要mysql的庫檔案和標頭檔了;

gcc testsql.c -I/usr/include/mysql -L/usr/lib/mysql –lmysqlclient

如果不出意外,當然,我是指天塌下來,應該是能順利編譯通過的;

啟動並執行話,當然會列印記錄嘍;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.