本人想在vc中初步學習一下sqlite資料庫的使用。但是遇到的問題重重。下面是我遇到的問題和解決方案:
在vc++中建立乙個工程,將檔案裡的**拷進工程中。
再次編譯,發現這時這時已經可以編譯通過。第乙個問題解決。
但是在build時出現了如下問題:
--------------------configuration: sqlite - win32 debug--------------------
linking...
sqlite.obj : error lnk2001: unresolved external symbol _sqlite3_free_table
sqlite.obj : error lnk2001: unresolved external symbol _sqlite3_get_table
sqlite.obj : error lnk2001: unresolved external symbol _sqlite3_exec
sqlite.obj : error lnk2001: unresolved external symbol _sqlite3_close
sqlite.obj : error lnk2001: unresolved external symbol _sqlite3_errmsg
sqlite.obj : error lnk2001: unresolved external symbol _sqlite3_open
debug/sqlite.exe : fatal error lnk1120: 6 unresolved externals
error executing link.exe.
sqlite.exe - 7 error(s), 0 warning(s)
這是因為在我的工程中沒有加進外部的lib檔案。於是我就在工程-》設定-》link中的lib中新增了sqlite3.lib。
但是這是會出現以下的錯誤:
linking...
link : fatal error lnk1104: cannot open file "sqlite3.lib"
error executing link.exe.
sqlite.exe - 1 error(s), 0 warning(s)
因為在我的工程中沒有這個外部檔案,鏈結時當然就找不到這個檔案了。所以會報錯。
於是我就在網上搜尋,找到了一下的方法解決:
下面我們就開始做我們的sqlite3.lib檔案
按下enter鍵時,我又遇到了乙個錯誤:
系統報錯說我缺少mspdb60.dll這個動態鏈結庫。這就鬱悶了,搞了那麼久現在還出現了軟體的問題,真的讓我太鬱悶了。於是我又到網上去尋找答案。說是自己下乙個放在d:/microsoft visual studio/vc98/bin目錄裡就行。於是我就按照他說的去做(因為是盜版的軟體上面的軟體一般會缺少,要自己加進去)。
這時在在命令列中執行上面的那條語句。結果居然成功的執行了。真是太高興了。這時我在d:/microsoft visual studio/vc98/bin目錄中真的找到了sqlite3.lib的檔案。於是我就把這個檔案拷到我的工作目錄中。
這時我已經把sqlite3.h sqlite3.lib sqlite3.dll檔案複製到我的工程目錄中。然後再把我們的工程build一次,結果成功的執行了。
下面是執行結果:
真是太高興了,我的第乙個sqlite程式測試成功。歷經萬難險阻,我終於會使用乙個簡單的sqlite程式。
下面是我的程式源**:
#include
#include
#include "sqlite3.h"
int main( void )
else
//建立乙個表,如果該錶存在,則不建立,
//返回值為sqlite_ok為成功
//函式引數:第乙個為運算元據庫的指標,第二句為sql命令字串
//第三個引數為callback函式,這裡沒有用,第四個引數為callback函式
//第五個引數給出提示資訊,儲存在 zerrmsg 中
char *sql = "create table sensordata(/
id integer primary key,/
sensorid integer,/
sitenum integer,/
time varchar(12),/
sensorparameter real/
);" ;
sqlite3_exec( db , sql , 0 , 0 , &zerrmsg ); //執行sql語句
#ifdef _debug_
printf("zerrmsg = %s /n", zerrmsg); //預編譯錯誤。在debug模式下時會編譯,但不會進入到**中。
#endif
//插入資料
sql = "insert into /"sensordata/" values(null , 1 , 1 , '201009022115', 11 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zerrmsg );
int nrow = 0, ncolumn = 0;
char **azresult; //二維陣列存放結果
//查詢資料
/*
int sqlite3_get_table(sqlite3*, const char *sql,char ***result , int *nrow , int *ncolumn ,char **errmsg );
result中是以陣列的形式存放你所查詢的資料,首先是表名,再是資料。
nrow ,ncolumn分別為查詢語句返回的結果集的行數,列數,沒有查到結果時返回0
*/
sql = "select * from sensordata ";
sqlite3_get_table( db , sql , &azresult , &nrow , &ncolumn , &zerrmsg );
int i = 0 ;
printf( "row:%d column=%d /n" , nrow , ncolumn );
printf( "/nthe result of querying is : /n" );
for( i=0 ; i
printf( "azresult[%d] = %s/n", i , azresult[i] );
//釋放掉 azresult 的記憶體空間
sqlite3_free_table( azresult );
#ifdef _debug_
printf("zerrmsg = %s /n", zerrmsg);
#endif
sqlite3_close(db); //關閉資料庫
return 0;
}
SQLite在VC下的使用
一 sqlite簡介 sqlite 是用c語言編寫的開源資料庫,主要用於嵌入式,你也可以把它整合在自己的桌面程式中,也有人將其替代access,用作後台資料庫。sqlite 支援多數sql92標準,例如 索引 限制 觸發和檢視支援。支援 null integer real text 和 blob 資...
SQLite在VC下的使用
一 sqlite簡介 sqlite 是用c語言編寫的開源資料庫,主要用於嵌入式,你也可以把它整合在自己的桌面程式中,也有人將其替代access,用作後台資料庫。sqlite 支援多數sql92標準,例如 索引 限制 觸發和檢視支援。支援 null integer real text 和 blob 資...
SQLite在VC下的使用
自 http hi.baidu.com yeetoo blog item 2fde8813346efe836538db87.html 在vc中使用sqlite的例子 2007年09月26日 星期三 14 06 我打算在ponyse上把sqlite做為第乙個儲存 轉換資料 的資料庫,所以今天小試了一把...