sqlitec編譯
1.輸入su - root命令切換到root
2.安裝c編譯器的命令為:yum install gcc
3.安裝c++編譯器的命令為:yum install gcc-c++ 。
4.編譯命令:gcc c源文件名
5.此編譯命令會產生一個a.out二進制文件,使用./a.out執行此文件
② 如何在linux下用C/C++語言操作資料庫sqlite3
1. 說明 這里我們假設你已經編譯好了sqlite的庫文件 : libsqlite3.a libsqlite3.la libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6 pkgconfig 和可執行文件 : sqlite3 我們再假設你的sqlite3的安裝目錄在 /usr/local/sqlite3 目錄下。 如果不是,我們可以這樣做,將你的安裝文件復制到 /usr/local/sqlite3 這個目錄, 這樣我們好在下面的操作中更加統一,從而減少出錯的概率 例如:[root@localhost home]# cp -rf sqlite-3.3.8-ix86/ /usr/local/sqlite3 這里假設 /home/sqlite-3.3.8-ix86/ 是你的安裝目錄,也就是說你的sqlite原來就是安裝在這里 這樣之後,我們的sqlite3的庫文件目錄是:/usr/local/sqlite3/lib 可執行文件 sqlite3 的目錄是: /usr/local/sqlite3/bin 頭文件 sqlite3.h 的目錄是: /usr/local/sqlite3/include 好拉,現在開始我們的Linux下sqlite3編程之旅。 2. 開始 這里我們現在進行一個測試。 現在我們來寫個C/C++程序,調用 sqlite 的 API 介面函數。 下面是一個C程序的例子,顯示怎麼使用 sqlite 的 C/C++ 介面. 資料庫的名字由第一個參數取得且第二個參數或更多的參數是 SQL 執行語句. 這個函數調用sqlite3_open() 在 16 行打開資料庫,並且sqlite3_close() 在 25 行關閉資料庫連接。 [root@localhost temp]# vi opendbsqlite.c 按下i 鍵切換到輸入模式,輸入下列代碼:// name: opendbsqlite.c // This prog is used to test C/C++ API for sqlite3.It is very simple,ha! // Author : zieckey All rights reserved. // data : 2006/11/13 #include <stdio.h> #include <sqlite3.h> int main( void ) { sqlite3 *db=NULL; char *zErrMsg = 0; int rc; //打開指定的資料庫文件,如果不存在將創建一個同名的資料庫文件 rc = sqlite3_open("zieckey.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s ", sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } else printf("You have opened a sqlite3 database named zieckey.db successfully! Congratulations! Have fun ! ^-^ "); sqlite3_close(db); //關閉資料庫 return 0; } 退出,保存。(代碼輸入完成後,按下 Esc 鍵,然後輸入: :wq ,回車就好拉) 好拉,現在編譯:[root@localhost temp]# gcc opendbsqlite.c -o db.out 或者遇到這樣的問題:[root@localhost temp]# gcc opendbsqlite.c -o db.out opendbsqlite.c:11:21: sqlite3.h: 沒有那個文件或目錄 opendbsqlite.c: In function `main': opendbsqlite.c:19: `sqlite3' undeclared (first use in this function) opendbsqlite.c:19: (Each undeclared identifier is reported only once opendbsqlite.c:19: for each function it appears in.) opendbsqlite.c:19: `db' undeclared (first use in this function) 這是由於沒有找到頭文件的原因。 也許會碰到類似這樣的問題:[root@localhost temp]# gcc opendbsqlite.c -o db.out /tmp/ccTkItnN.o(.text+0x2b): In function `main': : undefined reference to `sqlite3_open' /tmp/ccTkItnN.o(.text+0x45): In function `main': : undefined reference to `sqlite3_errmsg' /tmp/ccTkItnN.o(.text+0x67): In function `main': : undefined reference to `sqlite3_close' /tmp/ccTkItnN.o(.text+0x8f): In function `main': : undefined reference to `sqlite3_close' collect2: ld returned 1 exit status 這是個沒有找到庫文件的問題。 下面我們著手解決這些問題。
③ SQlite編譯錯誤
參考答案: 其身正,不令而行;其身不正,雖令不從。
④ 如何在Linux下用c語言操作資料庫sqlite3
示例代碼:
// name: query.c
// This prog is used to test C/C++ API for sqlite3 .It is very simple,ha !
// Author : zieckey All rights reserved.
// data : 2006/11/18
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#define _DEBUG_
int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("zieckey.db", &db); //打開指定的資料庫文件,如果不存在將創建一個同名的資料庫文件
if( rc )
{
fprintf(stderr, "Can't open database: %s
", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
");
//創建一個表,如果該表存在,則不創建,並給出提示信息,存儲在 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 );
#ifdef _DEBUG_
printf("zErrMsg = %s
", zErrMsg);
#endif
//插入數據
sql = "INSERT INTO "SensorData" VALUES(NULL , 1 , 1 , '200605011206', 18.9 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
sql = "INSERT INTO "SensorData" VALUES(NULL , 1 , 1 , '200605011306', 16.4 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
int nrow = 0, ncolumn = 0;
char **azResult; //二維數組存放結果
//查詢數據
sql = "SELECT * FROM SensorData ";
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
int i = 0 ;
printf( "row:%d column=%d
" , nrow , ncolumn );
printf( "
The result of querying is :
" );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s
", i , azResult[i] );
//釋放掉 azResult 的內存空間
sqlite3_free_table( azResult );
#ifdef _DEBUG_
printf("zErrMsg = %s
", zErrMsg);
#endif
sqlite3_close(db); //關閉資料庫
return 0;
}
我們這里用到了一個查詢的語句是 "SELECT * FROM SensorData " ,
在C語言中對應的函數介面是 sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
這個函數介面的解釋在程序中已經注釋。
下面我們編譯運行下看看,
[root@localhost temp]# export LD_LIBRARY_PATH=/usr/local/sqlite3/lib:$LD_LIBRARY_PATH
[root@localhost temp]# gcc query.c -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include
query.c:29:21: warning: multi-line string literals are deprecated
[root@localhost temp]# ./a.out
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
zErrMsg = (null)
row:2 column=5
The result of querying is :
azResult[0] = ID
azResult[1] = SensorID
azResult[2] = SiteNum
azResult[3] = Time
azResult[4] = SensorParameter
azResult[5] = 1
azResult[6] = 1
azResult[7] = 1
azResult[8] = 200605011206
azResult[9] = 18.9
azResult[10] = 2
azResult[11] = 1
azResult[12] = 1
azResult[13] = 200605011306
azResult[14] = 16.4
zErrMsg = (null)
這里我們可以看到,azResult 的前面 5 個數據正好是我們的表 SensorData 的列屬性,
之後才是我們要查詢的數據。所以我們的程序中才有 i<( nrow + 1 ) * ncolumn 的判斷條件:
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s ", i , azResult[i] );
輸出中有 zErrMsg = (null) 這樣的字句,這是 zErrMsg 保留的錯誤信息,
正如你所看到的,zErrMsg 為空,表明在執行過程中沒有錯誤信息。
⑤ sqlite3怎麼指定編譯工具
一、sqlite-3.3.8編譯安裝
請閱讀在安裝包里的 INSTALL或者README 文件。SQLite已經內置了,你不需要安裝任何附加的軟體(additional software)。
Windows users可以下載SQLite擴展DLL。
這里簡單介紹一下:
假設你得到的是源代碼sqlite-3.3.8.tar.gz,這里將告訴你怎麼編譯它。
解壓sqlite-3.3.8.tar.gz 到 /home目錄下
For example:
tar zxvf sqlite-3.3.8.tar.gz -C /home
cd /home
mkdir sqlite-3.3.8-ix86
cd /home/sqlite-3.3.8-ix86/
../sqlite-3.3.8/configure --prefix=/home/sqlite-3.3.8-ix86
編譯並安裝,然後生成幫助文檔
make && make install && make doc
如果出現下列錯誤
../sqlite-3.3.8/src/tclsqlite.c: In function `DbUpdateHandler':
../sqlite-3.3.8/src/tclsqlite.c:333: warning: passing arg 3 of `Tcl_ListObjAppendElement' makes pointer from integer without a cast
../sqlite-3.3.8/src/tclsqlite.c: In function `tclSqlFunc':
../sqlite-3.3.8/src/tclsqlite.c:419: warning: passing arg 1 of `Tcl_NewByteArrayObj' discards qualifiers from pointer target type
...
這個都是tcl相關的錯誤,可以先安裝ActiveTcl以解決.假如你不需要tcl支持,那麼這個錯誤可以這樣避免:
cd /home/sqlite-3.3.8-ix86/
../sqlite-3.3.8/configure --disable-tcl --prefix=/home/sqlite-3.3.8-ix86
編譯並安裝,然後生成幫助文檔
make && make install && make doc
不出意外,將不會出現錯誤,那麼
Libraries have been installed in:
/home/sqlite-3.3.8-ix86/lib
庫文件已經生成在 /home/sqlite-3.3.8-ix86/lib 目錄下
可執行文件sqlite3已經生成在 /home/sqlite-3.3.8-ix86/bin 目錄下
下面創建一個新的資料庫文件名叫"zieckey.db" (當然你可以使用不同的名字) 來測試資料庫.
直接輸入: /home/sqlite-3.3.8-ix86/bin/sqlite3 test.db
如果出現下面字樣表明編譯安裝已經成功了.
SQLite version 3.3.8
Enter ".help" for instructions
sqlite>
二 、SQLite的基本語法
這一章我們將會學習到sqlite的基本語法,sqlite的語法現象和SQL92是比較相象的,
或者說sqlite3兼容大部份SQL92的語法現象。
下面我們看看怎麼用這些語法現象來創建資料庫以及對資料庫的各種操作。
2.1 新建一個資料庫
例如我們想新建一個資料庫命名為zieckey.db ,可以直接在shell下輸入 sqlite3 zieckey.db ,
前提是:先進放sqlite的安裝文件夾下然後執行下面的操作:
# ./sqlite3 zieckey.db
SQLite version 3.0.8
Enter ".help" for instructions
sqlite>
這里 SQLite version 3.0.8 是SQLite的版本信息。也就是說本文使用的sqlite版本為 version 3.0.8 .
這樣就創建了一個新的資料庫文件,命名為 zieckey.db
2.2 創建表和插入值
剛剛我們創建了一個新的資料庫zieckey.db,加入我們想在其中新建一個名為 SensorData 的表,其包含五個列元素。
可以用CREATE TABLE語法命令。
CREATE TABLE語句基本上就是"CREATE TABLE"關鍵字後跟一個新的表名以及括弧內的一堆定義和約束。表名可以是字元串或者標識符。以"sqlite_"開頭的表名是留給sqlite資料庫引擎使用的。每個欄位的定義是欄位名後跟欄位的數據類型,接著是一個或多個的欄位約束。欄位的 數據類型並不限制欄位中可以存放的數據。更多信息,參見sqlite的CREATE TABLE語法。
這里具體作法如下:
# sqlite3 zieckey.db
SQLite version 3.0.8
Enter ".help" for instructions
sqlite> CREATE TABLE SensorData(
...> ID INTEGER PRIMARY KEY,
...> SensorID INTEGER,
...> SiteNum INTEGER,
...> Time VARCHAR(12),
...> SensorParameter REAL
...> );
注意sqlite下除了特殊命令都要以分號 「;」 結尾,否則它將一直等待第一個分號的出現才判斷這條命令結束。
⑥ 如何編譯SQLite-How To Compile SQLite
SQLite是ANSI-C的源代碼。在使用之前必須要編譯成機器碼。這篇文章是用於各種編譯SQLite方法的指南。
這篇文章不包含編譯SQLite的每個步驟的反饋,那樣可能會困難因為每種開發場景都不同。所以這篇文章描述和闡述了編譯Sqlite的原則。典型的編譯命令已經作為例子提供了,以期望應用開發者能夠使用這些例子作為完成他們自己定製的編譯過程的的一個指南。換句話說,這篇文章提供了想法和見解,而不是交鑰匙的解決方法。
融合VS單獨源文件
Sqlite是由超過一百個c源碼文件以及眾多的目錄下的腳本構建的。Sqlite的實現是純粹的ANSI-C,但是許多C語言源代碼文件是由輔助的C程序生成或者轉換來的,並且AWK,SED和TCL腳本會融合到完成的sqlite庫中。對Sqlite構建需要的C程序和轉換和創建C語言源碼是一個復雜的過程。
為了簡化這些,sqlite也通過一個預打包的合並後的源碼文件:sqlite3.c。這個合並文件是一個ANSI-C源碼實現整個SQLite庫的唯一文件。合並後的文件更容易處理。所有的東西都包含在這一個文件里,所以很容易進入一個更大的C或者C++程序的源碼樹。所有的代碼生成和轉換步驟都已經實現了,因此沒有輔助的C程序需要去配置和變異,也沒有腳本需要去運行。並且,因此所有哭都包含在一個翻譯單元,編譯器可以做更多高級的優化從而提升5%到10%的性能。因為這些原因,融合後的源碼文件sqlite3.c對所有程序來講都是值得推薦的。
推薦所有的應用程序使用融合文件。
直接從單獨的源碼文件中構建sqlite當然可以,但是並不推薦。對一些特殊的應用程序,可能需要修改構建程序去處理使用那些從網站上下載的預構建的源碼文件不能完成的情況。對於這些情況,推薦構建和使用一個定製過的合並文件。換句話說,即使一個工程需要以單獨的源碼文件構建sqlite,仍然推薦使用一個融合後的源碼文件作為一個中間步驟。
編譯命令行介面(CLI)
構建命令行介面需要三個源碼文件:
sqlite3.c:Sqlite融合的源碼文件
sqlite3.h:匹配sqlite3.c以及定義sqlite的c語言介面的頭文件
shell.c:命令行介面程序本身。這個c源碼文件包含一個main()的常式和每輪循環的用戶輸入的提示符並將輸入傳給sqlite資料庫引擎用於處理。
所有的上述源碼的三個文件都被包含在下載頁面的amalgamation tarball中。
為了構建CLI,簡單的將這三個文件放置在相同的目錄下然後一起編譯他們。用MSVC:
cl shell.c sqlite3.c -Fesqlite3.exe
在unix系統上(或者在windows上用cygwin或者mingw+msys)典型的命令會有些像這樣:
gcc shell.c sqlite3.c -lpthread -ldl
為了SQLite線程安全,需要pthreads庫。但是因為CLI是一個單線程的,我們可以指示SQLite構建一個非線程安全的庫並因此護綠pthreads庫:
gcc -DSQLITE_THREADSAFE=0 shell.c sqlite3.c -ldl
-ldl庫是在支持動態裝載時需要,例如sqlite3_load_extension() 介面和load_extension()
SQL function。如果這些特性都不要求,那麼我們也可以使用SQLITE_OMIT_LOAD_EXTENSION編譯時間選項忽略他們。
gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c
有人可能想要提供其他的編譯時間選項(compile-time options),例如SQLITE_ENABLE_FTS3去全文本搜索或者SQLITE_ENABLE_RTREE用於R*樹搜索引擎擴展。而有人將正常指定一些編譯優化開關。(預編譯的CLI可以從選擇sqlite網站上使用「-Os」下載下來)有無數種可能的變數在這里。
關鍵點在這里:構建CLI需要編譯一起兩個C語言文件。shell.c文件包含入口的定義和用戶輸入的loop,而sqlite融合文件sqlite3.c包含完整的sqlite庫的實現。
編譯TCL介面
sqlite的tcl介面是一個小的模塊被添加到一般的融合文件中。結果是一個新的融合後的源碼文件,稱之為「tclsqlite3.c」。這個源碼文件是生成一個可以使用TCL
load命令去載入到一個標準的tclsh或者wish中,或者隨著sqlite構建成功生成一個單獨唯一的tclsh的共享庫所需要的。一個tcl的融合的副本被包含在下載頁的TEA
tarball中作為一個文件。
為了生成一個linux上的sqlite的TCL-loadable庫,下面的命令需要滿足:
gcc -o libtclsqlite3.so -shared tclsqlite3.c -lpthread -ldl -ltcl
不幸的是構建Mac OS X 和 Windows的共享庫並不是如此簡單。對於這些平台最好使用包含在TEA tarball中的configure腳本和makefile.
為了生成一個單獨的tclsh,可以用於sqlite靜態鏈接,使用如下的編譯器調用:
gcc -DTCLSH=1 tclsqlite3.c -ltcl -lpthread -ldl -lz -lm
這里的技巧是-DTCLSH=1選項。sqlite的TCL介面模塊包含一個main的過程,用於初始化一個TCL解釋器並在以-DTCLSH=1編譯後進入到一個命令行loop。上述命令可以工作在Linux和Mac
OS X,雖然有時可能需要依賴於平台調整庫選項以及編譯的TCL的哪一個版本。
構建融合文件
下載頁提供的sqlite融合文件的版本對大多數用戶來說是足夠的。然而,一些工程可能想要或者需要構建他們自己的融合文件。一個常見的構建一個定製的融合文件的理由是為了使用特定的compile-time options來定製sqlite庫。回想sqlite融合文件中包含了許多C代碼由輔助程序和腳本生成。許多的編譯時間選項影響這一成聖代碼而且必須在融合文件組裝前提供給代碼生成器。這一系列必須傳給代碼生成器的編譯時間相關的選項會使得sqlite的發布版本各不相同,但是在寫這邊文章的時候,代碼生成器需要知道的這組選項包括:
SQLITE_ENABLE_UPDATE_DELETE_LIMIT
SQLITE_OMIT_ALTERTABLE
SQLITE_OMIT_ANALYZE
SQLITE_OMIT_ATTACH
SQLITE_OMIT_AUTOINCREMENT
SQLITE_OMIT_CAST
SQLITE_OMIT_COMPOUND_SELECT
SQLITE_OMIT_EXPLAIN
SQLITE_OMIT_FOREIGN_KEY
SQLITE_OMIT_PRAGMA
SQLITE_OMIT_REINDEX
SQLITE_OMIT_SUBQUERY
SQLITE_OMIT_TEMPDB
SQLITE_OMIT_TRIGGER
SQLITE_OMIT_VACUUM
SQLITE_OMIT_VIEW
SQLITE_OMIT_VIRTUALTABLE
為了構建一個定製的融合文件,先下載原始的獨立源碼文件到一個unix或者類unix開發平台。確定獲取的原始源碼文件不是「預編譯過的源文件」。任何人都可以通過到下載頁或者直接從configuration management system.獲取完整的一套原始源碼文件。
假設sqlite源碼樹被存在一個名為「sqlite」的目錄下。計劃構建一個平行目錄下的名為「bld」的融合文件。首先通過運行sqlite源碼樹種的configure腳本運行或者通過製作一份源碼樹頂層的的makfile模板的一份,來構建一個合適的makefile.然後手動編輯這個Makfile去包含需要的編譯時間相關的選項。最終運行:
make sqlite3.c
在windows上使用MSVC:
nmake /f Makefile.msc sqlite3.c
sqlite3.c的make
target會自動構造一般的「sqlite3.c」合並的源碼文件,以及它的頭文件「sqlite3.h」,和包含TCL介面的融合源碼文件「tclsqlite3.c」。之後,需要的文件可以被拷貝到文件目錄下然後根據上述勾勒的過程編譯。
構建一個windows的動態鏈接庫DLL
為了在windows構建一個sqlite的dll使用,首先獲取對應的融合過的源碼文件,sqlit3.c和sqlite.h。這些可以從SQLite website上下載或者和上述告知的一樣去定製生成。
使用工作目錄下的源碼文件,一個dll可以在msvc中使用如下命令生成:
cl sqlite3.c -link -dll -out:sqlite3.dll
上述命令需要運行在msvc的MSVC Native Tools Command
Prompt.如何你已經在機器上安裝了msvc,你可能有多個版本的這種命令提示符,針對於x86和x64的自帶構建的,或者交叉編譯到ARM的。依賴要求的DLL去使用對應合適的命令提示符工具。
如果使用MinGW編譯器,命令是這樣的:
gcc -shared sqlite3.c -o sqlite3.dll
注意MinGW只生成32位的dll。另有一個分開的MinGW64工程可以用來生成64位的dll。可以推斷其命令行語法是類似的。需要注意的是最近的MSVC的版本生成的DLLs可能不能工作到WinXP或者更早版本的windows上。因此為了最大限度的兼容你的生成的dll,推薦MinGW。一個好的經驗法則是使用MinGW去生成32位的dlls,使用msvc去生成64位的dlls。
⑦ 如何在tornado中編譯sqlite源碼文件
輸入su - root命令切換到root
安裝c編譯器的命令為:yum install gcc
安裝c++編譯器的命令為:yum install gcc-c++ 。
編譯命令:gcc c源文件名
此編譯命令會產生一個a.out二進制文件,使用./a.out執行此文件
⑧ 如何在Linux下用C/C++語言操作資料庫sqlite3
這里我們假設你已經編譯好了sqlite的庫文件 :
libsqlite3.a libsqlite3.la libsqlite3.so libsqlite3.so.0libsqlite3.so.0.8.6 pkgconfig
和可執行文件 : sqlite3
我們再假設你的sqlite3的安裝目錄在 /usr/local/sqlite3 目錄下。
如果不是,我們可以這樣做,將你的安裝文件復制到 /usr/local/sqlite3 這個目錄,
這樣我們好在下面的操作中更加統一,從而減少出錯的概率
例如:[root@localhost home]# cp -rf sqlite-3.3.8-ix86//usr/local/sqlite3
這里假設 /home/sqlite-3.3.8-ix86/是你的安裝目錄,也就是說你的sqlite原來就是安裝在這里
這樣之後,我們的sqlite3的庫文件目錄是:/usr/local/sqlite3/lib
可執行文件 sqlite3 的目錄是: /usr/local/sqlite3/bin
頭文件 sqlite3.h 的目錄是: /usr/local/sqlite3/include
好拉,現在開始我們的Linux下sqlite3編程之旅。
2. 開始
這里我們現在進行一個測試。
現在我們來寫個C/C++程序,調用 sqlite 的 API 介面函數。
下面是一個C程序的例子,顯示怎麼使用 sqlite 的 C/C++ 介面.資料庫的名字由第一個參數取得且第二個參數或更多的參數是 SQL 執行語句. 這個函數調用sqlite3_open() 在 16行打開資料庫,並且sqlite3_close() 在 25 行關閉資料庫連接。
[root@localhost temp]# vi opendbsqlite.c
按下 i 鍵切換到輸入模式,輸入下列代碼:
// name: opendbsqlite.c
// This prog is used to test C/C++ API for sqlite3.It is verysimple,ha!
// Author : zieckey All rights reserved.
// data : 2006/11/13
#include <stdio.h>
#include <sqlite3.h>
int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
//打開指定的資料庫文件,如果不存在將創建一個同名的資料庫文件
rc = sqlite3_open("zieckey.db", &db);
if( rc )
{
fprintf(stderr, "Can't open database: %s
", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("You have opened a sqlite3 database named zieckey.dbsuccessfully!
Congratulations! Have fun ! ^-^
");
sqlite3_close(db); //關閉資料庫
return 0;
}
退出,保存。(代碼輸入完成後,按下 Esc 鍵,然後輸入: :wq ,回車就好拉)
好拉,現在編譯:[root@localhost te
或者遇到這樣的問題:
[root@localhost temp]# gcc opendbsqlite.c -o db.out
opendbsqlite.c:11:21: sqlite3.h: 沒有那個文件或目錄
opendbsqlite.c: In function `main':
opendbsqlite.c:19: `sqlite3' undeclared (first use in thisfunction)
opendbsqlite.c:19: (Each undeclared identifier is reported onlyonce
opendbsqlite.c:19: for each function it appears in.)
opendbsqlite.c:19: `db' undeclared (first use in thisfunction)
這是由於沒有找到頭文件的原因。
也許會碰到類似這樣的問題:
[root@localhost temp]# gcc opendbsqlite.c -o db.out
/tmp/ccTkItnN.o(.text+0x2b): In function `main':
: undefined reference to `sqlite3_open'
/tmp/ccTkItnN.o(.text+0x45): In function `main':
: undefined reference to `sqlite3_errmsg'
/tmp/ccTkItnN.o(.text+0x67): In function `main':
: undefined reference to `sqlite3_close'
/tmp/ccTkItnN.o(.text+0x8f): In function `main':
: undefined reference to `sqlite3_close'
collect2: ld returned 1 exit status
這是個沒有找到庫文件的問題。
下面我們著手解決這些問題。
由於用到了用戶自己的庫文件,所用應該指明所用到的庫,我們可以這樣編譯:
[root@localhost temp]# gcc opendbsqlite.c -o db.out-lsqlite3
我用用 -lsqlite3 選項就可以了(前面我們生成的庫文件是 libsqlite3.so.0.8.6 等,
去掉前面的lib和後面的版本標志,就剩下 sqlite3 了所以是 -lsqlite3 )。
如果我們在編譯安裝的時候,選擇了安裝路徑,例如這樣的話:
.......
# ../sqlite/configure --prefix=/usr/local/sqlite3
# make
.......
這樣編譯安裝時,sqlite的庫文件將會生成在 /usr/local/sqlite3/lib 目錄下
sqlite的頭文件將會生成在 /usr/local/sqlite3/include 目錄下
這時編譯還要指定庫文件路徑,因為系統默認的路徑沒有包含 /usr/local/sqlite3/lib
[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3-L/usr/local/sqlite3/lib
如果還不行的話,可能還需要指定頭文件 sqlite3.h 的路徑,如下:
[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3-L/usr/local/sqlite3/lib -I/usr/l
這樣編譯應該就可以了 ,運行:
[root@localhost temp]# ./db.out
./db.out: error while loading shared libraries:libsqlite3.so.0: cannot open shared object file: No such file ordirectory
運行是也許會出現類似上面的錯誤。
這個問題因為剛剛編譯的時候沒有選擇靜態編譯,那麼按照默認的編譯就動態編譯的。
動態編譯後,由於可執行文件在運行時要調用系統庫文件,
那麼沿著系統默認的庫文件搜索路徑搜索,就可能找不到我們現在所需的庫文件。
致使出現 "error while loading shared libraries" 等錯誤。
我們可以這樣解決:
方法一:靜態編譯
在編譯時加上 -static 參數,例如
[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3-L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include -static
[root@localhost temp]# ll
總用量 1584
-rwxr-xr-x 1 root root 1596988 11月 13 10:50 db.out
-rw-r--r-- 1 root root 614 11月 13 10:31 opendbsqlite.c
可以看到輸出文件 db.out ,其大小為: 1596988k
運行,好了,沒有出現錯誤
[root@localhost temp]# ./db.out
You have opened a sqlite3 database named zieckey.dbsuccessfully!
Congratulations! Have fun ! ^-^
方法二:重新配置系統環境變數 LD_LIBRARY_PATH
這時需要指定 libsqlite3.so.0 庫文件的路徑,也就是配置系統環境變數 LD_LIBRARY_PATH,
使系統能夠找到 libsqlite3.so.0 。
去掉 -static ,在編譯:
[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3-L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include
[root@localhost temp]# ll
總用量 36
-rwxr-xr-x 1 root root 12716 11月 13 10:56 db.out
-rw-r--r-- 1 root root 614 11月 13 10:31 opendbsqlite.c
[root@localhost temp]#
可以看到輸出文件 db.out ,其大小為: 12716k,比剛才的靜態編譯要小得多。
所以我們推薦使用動態編譯的方法。
好了,現在我們來指定系統環境變數 LD_LIBRARY_PATH 的值
在shell下輸入:
[root@localhost temp]# exportLD_LIBRARY_PATH=/usr/local/sqlite3/lib:$LD_LIBRARY_PATH
再運行
[root@localhost temp]# ./db.out
You have opened a sqlite3 database named zieckey.dbsuccessfully!
Congratulations! Have fun ! ^-^
⑨ 編譯的時候提示的是 sqlite3.c:5:21: 致命錯誤: sqlite3.h:沒有那個文件或目錄 編譯中斷。請問該怎麼做
用交叉編譯器編譯時,也會出現找不到sqlite3.h頭文件的情況,需要把sqlite3.h這個頭文件放到交叉編譯工具目錄下的 include。
sudo apt-get install libsqlite3-dev
⑩ SQLite在C++ Builder里怎麼用
C++/C++builder中調用的方法都是一樣的不需要任何組件,可以很方便的調用,,
1.在C++builder中 你要用implib 吧sqlite3.lib轉換成C++builder可以用的庫。
然後包含sqlite3.h頭文件在文件目錄下面放進去sqlite3.dll和sqlite3.lib
然後在程序中 import comment(lib,「sqlite3.lib」)就可以用了。
2.C++中的用法也是這樣的。問價不需要轉碼, 但是要包含頭文件。然後要sqlite3.dll
和sqlite3.lib,然後在程序下面import comment(lib,「sqlite3.lib」),也可以用了。
具體用法是,先用_sqlite3_open(),函數打開資料庫文件,
然後執行資料庫命令_sqlite3_exec();
要獲取數據集的話用sqlite3_get_table()獲取數據集合,
不過獲取的都是字元串,你要自己選好位置,或者你可以寫一個結構體,
像dataSet一樣