解壓後進入sqlite-3.6.12的根目錄。第壹,命令”。/configure”生成Makefile,然後運行命令“make”編譯源代碼,最後運行命令“make install”安裝SQLite3。安裝完成後,您可以運行命令sqlite3來查看SQLite3是否可以正常運行,如下所示:
【root @ localhost ~】# sqlite3
SQLite版本3.6.12
輸入“。幫助”以獲取說明
輸入以“;”結尾的SQL語句
sqlite & gt
可以看到,SQLite3將停留在提示符SQLite》處;等待用戶輸入SQL語句。
在使用SQLite3之前,您需要了解SQLite3支持的數據類型。SQLite3支持的基本數據類型主要包括以下幾類:
空
數字的
整數
真實的
文本
SQLite3會自動將其他數據類型轉換為上述五種基本數據類型,轉換規則如下:
char、clob、test、varchar-& gt;文本
整數-& gt;整數
實數、雙精度、浮點-& gt;真實的
blob-& gt;空
其余的數據類型被轉換為數值型
下面是壹個演示如何使用SQLite3的示例。
創建新數據庫
創建壹個新的數據庫test.db(後綴。db用於標識數據庫文件)。在test.db中創建壹個新表test_table,它有三列:姓名、性別和年齡。SQLite3的具體操作如下:
【root @ localhost home】# sqlite3 test . db
SQLite版本3.6.12
輸入“。幫助”以獲取說明
輸入以“;”結尾的SQL語句
sqlite & gt創建表test_table(姓名、性別、年齡);
如果數據庫test.db已經存在,命令“sqlite3 test.db”將在當前目錄中打開test.db。如果數據庫test.db不存在,命令“sqlite3 test.db”將在當前目錄中創建壹個新的數據庫test.db。為了提高效率,SQLite3不會立即創建test.db,但在創建第壹個表之前不會物理創建數據庫。
因為SQLite3可以根據插入數據的實際類型動態更改列的類型,所以不需要在create語句中給出列的類型。
創建索引
為了加快表的查詢速度,通常在主鍵中添加索引。下面是在name列上添加索引的過程。
sqlite & gt在test _ table(name)上創建索引test _ index
操作數據
以下是在test_table中插入、更新和刪除數據的操作:
sqlite & gt插入到test_table值中(‘小明‘,‘男‘,20);
sqlite & gt插入到test_table值中(‘小紅‘,‘女‘,18);
sqlite & gtselect * from test _ table
小明|男|20
小紅|女|18
sqlite & gtupdate test _ table set age = 19其中name =‘Xiaohong‘;
sqlite & gtselect * from test _ table
小明|男|20
小紅|女|19
sqlite & gt從test_table中刪除,其中name =‘Xiaoming‘;
sqlite & gtselect * from test _ table
小紅|女|19
批量操作數據庫
如下所示,test_table中插入了兩條連續的記錄:
sqlite & gt開始;
sqlite & gt插入到test_table值中(“肖雪”,“女性”,18);
sqlite & gt插入到test_table值中(‘小劉‘,‘男‘,20);
sqlite & gt提交;
sqlite & gtselect * from test _ table
小紅|女|19
肖雪|男|18
小劉|男|20
在命令commit運行之前,插入的數據不會寫入數據庫。
數據庫的導入和導出
以下是test.db到sql文件的導出:
【root @ localhost home】# sqlite3 test . db“。轉儲“》;test.sql
test.sql文件的內容如下:
開始交易;
創建表test_table(姓名、性別、年齡);
插入“test_table”值(‘小紅‘,‘女‘,19);
在test _ table(name)上創建索引test _ index
提交;
如下所示導入test.sql文件(導入前刪除原始test.db):
【root @ localhost home】# sqlite3 test . db & lt;test.sql
通過導入和導出test.sql文件,可以備份數據庫文件。
11.2.2 SQLite3的c接口
以上是SQLite3數據庫的命令操作方式。在實際使用中,通常是應用程序需要訪問數據庫。為此,SQLite3為各種編程語言提供了接口(本書介紹了C語言接口)。SQLite3有幾十個C接口。下面是壹些常用的C接口。
sqlite_open
功能:打開SQLite3數據庫。
原型:int sqlite3 _ open(const char * dbname,sqlite3 * * db)
參數:
數據庫名:數據庫的名稱;
數據庫句柄;
sqlite_colse
功能:關閉SQLite3數據庫。
原型:int SQLite _ close(sqlite3 * db)
例如:
測試c:
# include & ltstdio.h & gt
# include & ltsqlite3.h & gt
靜態sqlite3 * db = NULL
int main()
{
int rc
RC = sqlite3 _ open(“test . db“,& ampdb);
中頻(rc)
{
printf(“無法打開數據庫!\ n ");
}
其他
{
printf(“打開數據庫成功!\ n ");
}
sqlite3 _ close(db);
返回0;
}
運行命令“gcc -o test test.c -lsqlite3”進行編譯,運行測試的結果如下:
【root @ localhost home】#打開數據庫成功!
sqlite_exec
功能:執行SQL語句
prototype:int sqlite3 _ exec(sqlite3 * db,constchar * SQL,int(* callback)(void *,int,char * *),void *,char * * errmsg)。
參數:
Db:數據庫;
Sql:SQL語句;
回調:回滾;
Errmsg:錯誤消息
例如:
測試c:
# include & ltstdio.h & gt
# include & ltsqlite3.h & gt
靜態sqlite3 * db = NULL
static char * errmsg = NULL
int main()
{
int rc
RC = sqlite3 _ open(“test . db“,& ampdb);
RC = sqlite3 _ exec(db,“insert into test _ table values(‘包道‘,‘男‘,24)“,0,0,& amperrmsg);
中頻(rc)
{
printf(“exec失敗!\ n ");
}
其他
{
printf(“exec成功!\ n ");
}
sqlite3 _ close(db);
返回0;
}
編譯完成後,運行測試的結果如下:
【root @ localhost home】#。/測試
執行成功!
【root @ localhost home】# sqlite3 test . db
SQLite版本3.6.11
輸入“。幫助”以獲取說明
輸入以“;”結尾的SQL語句
sqlite & gtselect * from test _ table
包道|男|24歲
sqlite3_get_table
功能:執行SQL查詢
原型:int sqlite3 _ get _ table(sqlite3 * db,constchar * zsql,char * * pazresult,int * pnrow,int * pncolumn,char * * pzerrmsg)。
參數:
Db:數據庫;
ZSql:SQL語句;
PazResult:查詢結果集;
PnRow:結果集中的行數;
PnColumn:結果集中的列數;
Errmsg:錯誤消息;
sqlite3_free_table
角色:註銷結果集
原型:void sqlite3 _ free _ table(char * * result)
參數:
結果:結果集;
例如:
測試c:
# include & ltstdio.h & gt
# include & ltsqlite3.h & gt
靜態sqlite3 * db = NULL
static char * * Result = NULL
static char * errmsg = NULL
int main()
{
int rc,I,j;
int nrow
int ncolumn
RC = sqlite3 _ open(“test . db“,& ampdb);
RC = sqlite3 _ get _ table(db,“select * from test_table“,& amp結果& ampnrow & amp;n列,
& amperrmsg);
中頻(rc)
{
printf(“查詢失敗!\ n ");
}
其他
{
printf(“查詢成功!\ n ");
for(I = 1;我& lt= nrowi++)
{
for(j = 0;j & ltncolumnj++)
{
printf(“% s |“,Result【I * n column+j】);
}
printf(“\ n“);
}
}
sqlite3 _ free _ table(Result);
sqlite3 _ close(db);
返回0;
}
編譯完成後,運行測試的結果如下:
【root @ localhost home】#。/測試
查詢成功!
小紅|女| 19 |
肖雪|女| 18 |
小劉|男| 20 |
包道|男| 24 |
sqlite3_prepare
功能:將SQL語句編譯成字節碼,該字節碼將由下面的執行函數執行。
原型:intsqlite3 _ prepare(sqlite3 * db,constchar * zsql,intnbyte,sqlite3 _ stmt * * stmt,constchar * * ptail)。
參數:
Db:數據庫;
ZSql:SQL語句;
nbyte:SQL語句的最大字節數;
Stmt:語句句柄;
Ptail:指向SQL語句無用部分的指針;
sqlite3_step
功能:逐步執行SQL語句的字節碼。
原型:int sqlite3 _ step(sqlite3 _ stmt *)
例如:
測試c:
# include & ltstdio.h & gt
# include & ltsqlite3.h & gt
靜態sqlite3 * db = NULL
static sqlite3 _ stmt * stmt = NULL
int main()
{
int rc,I,j;
int ncolumn
RC = sqlite3 _ open(“test . db“,& ampdb);
RC = sqlite3 _ prepare(db,“select * from test_table“,-1;stmt,0);
中頻(rc)
{
printf(“查詢失敗!\ n ");
}
其他
{
printf(“查詢成功!\ n ");
RC = sqlite3 _ step(stmt);
n column = sqlite3 _ column _ count(stmt);
while(RC = = SQLITE _ ROW)
{
for(I = 0;我& lt2;i++)
{
printf(“% s |“,sqlite3 _ column _ text(stmt,I));
}
printf(“\ n“);
RC = sqlite3 _ step(stmt);
}
}
sqlite3 _ finalize(stmt);
sqlite3 _ close(db);
返回0;
}
編譯完成後,運行測試的結果如下:
【root @ localhost home】#。/測試
查詢成功!
小紅|女| 19 |
肖雪|女| 18 |
小劉|男| 20 |
包道|男| 24 |
在程序中訪問SQLite3數據庫時,要註意C API的接口定義和數據類型是否正確,否則會得到錯誤的訪問結果。