用戶手冊:http://wenku.baidu.com/view/872d70ece009581b6bd9eb75.html
百科百科:.net php c c++調用實例
SQLite是一個開源的嵌入式關係數據庫,SQLite可移植性好,很容易使用,很小,高效而且可靠,佔用資源少。
SQLite嵌入到使用它的應用程序中,它們共用相同的進程空間,而不是單獨的一個進程。從外部看,它並不像一個RDBMS,但在進程內部,它卻是完整的,自包含的數據庫引擎。
嵌入式數據庫的一大好處就是在你的程序內部不需要網絡配置,也不需要管理。因爲客戶端和服務器在同一進程空間運行。SQLite 的數據庫權限只依賴於文件系統,沒有用戶帳戶的概念。SQLite 有數據庫級鎖定,沒有網絡服務器。它需要的內存,其它開銷很小,適合用於嵌入式設備。你需要做的僅僅是把它正確的編譯到你的程序。
2. 術語
Sql語句: 用來操作已打開的數據庫的操作語句
3. 常用API使用說明
3.1 所需頭文件
#include <sqlite3.h>
3.2 常見API
3.2.1 打開數據庫
原型:int sqlite3_open(const char *filename, sqlite3 **ppDb)
功能:打開數據庫文件
參數:filename 所要打開的文件名
*ppDb 成功打開文件後用來操作數據庫的指針
返回值:SQLITE_OK 表示成功打開文件
其他值 表示打開失敗
3.2.2 關閉數據庫
原型:int sqlite3_close(sqlite3 * pDb)
功能:打開數據庫文件
參數: ppDb 成功打開文件後用來操作數據庫的指針
返回值:SQLITE_OK 表示關閉成功
SQLITE_BUSY 表示關閉失敗
3.2.3 執行sql語句
原型:int sqlite3_exec(sqlite3* pDb,
Const char *sql, int (*callback)(void*,int,char**,char**),
Void* arg,
char**errmsg)
功能:執行sql語句
參數: pDb 所要操作數據庫的指針
Sql 要執行的sql語句
Callback 執行語句後調用的回調函數指針
arg 傳遞給回調函數的第一個參數
errmsg 返回的錯誤信息
返回值:SQLITE_OK 表示關閉成功
SQLITE_BUSY 表示關閉失敗
3.2.4 編譯sql語句的聲明
原型:int sqlite3_prepare (sqlite3* pDb, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail)
功能: 編譯要執行sql語句
參數: pDb 所要操作數據庫的指針
zSql 要執行的sql語句
nByte sql語句的長度
ppStmt sql語句編譯的結果
pzTail 返回的錯誤信息
返回值:SQLITE_OK 表示關閉成功
SQLITE_BUSY 表示關閉失敗
3.2.5 表格行的步進
原型:int sqlite3_step(sqlite3_stmt* pStmt )
功能: 使數據庫指針指向下一行
參數: pStmt 數據庫指針
返回值:SQLITE_ROW 表示該行不爲空
其他 表示該行爲空
3.2.6 獲取該行的某列的int型數據
原型:int sqlite3_column_int(sqlite3_stmt* pStmt , int iCol)
功能: 獲取pStmt所指向的該列的第iCol列int型數據
參數: pStmt 數據庫指針
iCol 第幾列
3.2.7 獲取該行的某列的text型數據
原型: int sqlite3_column_text(sqlite3_stmt* pStmt , int iCol)
功能: 獲取pStmt所指向的該列的第iCol列text型數據
參數: pStmt 數據庫指針
iCol 第幾列
3.2.8 獲取該行的某列的blob型數據
原型: int sqlite3_column_blob (sqlite3_stmt* pStmt , int iCol)
功能: 獲取pStmt所指向的該列的第iCol列blob型數據
參數: pStmt 數據庫指針
iCol 第幾列
3.2.9 獲取該行的某列的double型數據
原型: int sqlite3_column_double (sqlite3_stmt* pStmt , int iCol)
功能: 獲取pStmt所指向的該列的第iCol列double型數據
參數: pStmt 數據庫指針
iCol 第幾列
3.2.10 釋放一個已準備的聲明的類
原型: int sqlite3_finalize(sqlite3_stmt *pStmt)
功能: 操作完數據庫後調用該函數釋放使用的空間
參數: pStmt 數據庫指針
返回值:SQLITE_OK 表示關閉成功
SQLITE_BUSY 表示關閉失敗
4. 使用實例
#include <sqlite3.h>
#include <stdio.h>
#include <string.h>
//回調函數
int ListTablesName_callback(void *pDB, int argc, char **argv, char **azColName)
{
int ret;
char pSqlQuerySel[128] = "select * from ";
char *pError = NULL;
sqlite3_stmt *pStmt = NULL;
strcat(pSqlQuerySel, argv[0]);
fprintf(stdout, "%s\n", pSqlQuerySel);
//準備讀取數據
ret = sqlite3_prepare((sqlite3 *)pDB, pSqlQuerySel, strlen(pSqlQuerySel), &pStmt, (const char**)&pError);
if (ret != SQLITE_OK)
{
fprintf(stderr, "sqlite3_prepare fail\n");
return -1;
}
while (1)
{
ret = sqlite3_step(pStmt); //移動記錄集
if (ret != SQLITE_ROW)
break;
fprintf(stdout, "%d ", sqlite3_column_int(pStmt, 0));
fprintf(stdout, "%s \n", sqlite3_column_text(pStmt, 1));
}
return 0;
}
int main()
{
int ret = 0;
sqlite3 *pDB = NULL;
sqlite3_stmt *pStmt = NULL;
char *pError = NULL;
char *pListTablesNameSel = (char*)"SELECT name FROM sqlite_master";//列出所以表名語句
//打開文件
ret = sqlite3_open("test.db", &pDB);
if (ret != SQLITE_OK)
{
fprintf(stderr, "can't open database : %s\n", sqlite3_errmsg(pDB));
sqlite3_close(pDB);
return -1;
}
//查找源文件中所有表名
ret = sqlite3_exec(pDB, pListTablesNameSel, ListTablesName_callback, pDB, &pError);
if (ret != SQLITE_OK)
{
fprintf(stderr, "list table count error: %s", sqlite3_errmsg(pDB));
sqlite3_close(pDB);
return -1;
}
return 0;
}
編譯:g++ example.cpp –lsqlite3
注意:這裏需要把sqlite的頭文件和庫包含在環境變量中
5 終端命令行操作數據庫
編譯完sqlite源碼後可以得到一個可以直接操作數據庫文件的可執行文件,名字爲sqlite3。
下面簡單介紹命令行操作數據庫的命令
# ./sqlite3 test.db
sqlite> .tables //顯示test.db中所有的表
info login
sqlite> .schema //顯示test.db中所有的表的建表語句
CREATE TABLE info(id int, name text);
CREATE TABLE login(id int, name text);
sqlite> .schema info //查詢某個表的創建語句
CREATE TABLE info(id int, name text);
sqlite> .help //顯示所以命令
sqlite> select * from info; //查表語句
1|wang
2|liu
1|zhang
sqlite>.quit //退出操作
sqlite3兼容sql中大部分常用的sql語句,由於sql語句比較多,這裏就不一一例舉,如果需要了解更加深入,可以上網查詢