本文介紹一下sqlite c/c++介面。
早期的sqlite c/c++介面只有5個介面函式, 很容易學習。 新版本的sqlite新增了很多功能, 目前大概有185個api介面。本文介紹一些核心的api介面和物件。
1. 核心物件
資料庫連線物件: sqlite3
prepared_statement物件: sqlite3_stmt
嚴格的講 sqlite3_stmt物件也不是必須的, 另外兩個封裝了qlite3_stmt的介面sqlite3_exec和sqlite3_get_table可以代替sqlite3_stmt物件完成資料訪問工作。 但是理解sqlite3_stmt對於充分使用sqlite有很大幫助。
以下是一些操作 sqlite3和sqlite3_stmt物件的介面。下面這些名字只是提供乙個概念,實際的函式可能會有很多版本比如sqlite3_open() 有,sqlite3_open_v16(), sqlite3_open_v2()
sqlite3_open()
sqlite3_prepare()
sqlite3_step()
sqlite3_column()
sqlite3_finalize()
sqlite3_close()
函式說明
sqlite3_open() 開啟乙個資料庫連線, 返回sqlite3物件
sqlite3_prepare() 此函式將sql轉換成sqlite3_stmt物件, 通常使用sqlite3_prepare_v2()
sqlite3_step() 此函式單步執行sqlite3_stmt
sqlite3_column() 返回 sqlite3_stmt所在行的指定column的值, 有如下具體函式
* sqlite3_column_blob()
* sqlite3_column_bytes()
* sqlite3_column_bytes16()
* sqlite3_column_count()
* sqlite3_column_double()
* sqlite3_column_int()
* sqlite3_column_int64()
* sqlite3_column_text()
* sqlite3_column_text16()
* sqlite3_column_type()
* sqlite3_column_value()
sqlite3_finalize() 銷毀 sqlite3_stmt物件, 所有sqlite3_stmt物件都應該銷毀以防止記憶體洩漏
sqlite3_close() 關閉資料庫連線, 銷毀sqlite3物件, 所有與這個sqlite3物件相關的sqlite3_stmt物件都應該在呼叫這個函式之前銷毀。
2. 繫結和重新執行sqlite3_stmt
sqlite3_reset(): 此函式使得執行過sqlite3_step()的sqlite3_stmt重新執行, 相當於將游標返回到開始位置重新讀取資料, sqlite3_reset()的效率比重新建立乙個sqlite3_stmt搞很多。
sqlite3_bind(): 此函式用於insert sql, 當同乙個insert sql要插入一系列資料時使用, 每次sqlite3_step()後重新bind資料。
3. 一般用法和步驟
(1) create a prepared statement using sqlite3_prepare().
(2) evaluate the prepared statement by calling sqlite3_step() one or more times.
(3) for queries, extract results by calling sqlite3_column() in between two calls to sqlite3_step().
(4) destroy the prepared statement using sqlite3_finalize().
4. 簡易介面
sqlite3_get_table()
sqlite3_exec()
5. 例子
view plaincopy to clipboardprint?
01.void basic_inte***ce()
02.
16. rc= sqlite3_prepare_v2(db,sql, strlen(sql), &stmt,0);
17. if( rc )
22. //right align output format
23. printf("%10s %10s %10s/n", "id", "street", "city");
24. printf("%10s %10s %10s/n", "---", "---", "---");
25. while(sqlite3_step(stmt)==sqlite_row )
31. sqlite3_finalize(stmt);
32. sqlite3_close(db);
33.}
void basic_inte***ce()
rc= sqlite3_prepare_v2(db,sql, strlen(sql), &stmt,0);
if( rc )
//right align output format
printf("%10s %10s %10s/n", "id", "street", "city");
printf("%10s %10s %10s/n", "---", "---", "---");
while(sqlite3_step(stmt)==sqlite_row )
sqlite3_finalize(stmt);
sqlite3_close(db);
}參考:
an introduction to the sqlite c/c++ inte***ce
gns3 介面說明 轉
dynamips 支援的模組 首先從c7200 開始 slot 0 c7200 io fe 支援1 個fastethernet 介面 c7200 io 2fe 支援2 個fastethernet 介面 dynamipsgui 2.3 裡面沒有這個選項,想用只有自己添 加了 c7200 io ge e...
類小結3 介面 內部類
內部類提供了更好的封裝,把內部類隱藏到外部類之內,不允許同乙個包中的其他類訪問該類,也可以使用private將內部類隱藏起來 定義為static的內部類稱為靜態內部類 非靜態內部類不能宣告static成員,只有靜態的內部類可以宣告static成員,且可以訪問外部類的靜態成員或靜態方法,內部類可以直接...
依賴注入例項3 介面注入
介面注入 也就是說將注入的 放在了介面裡,與建構函式和屬性注入在整體 結構上不同。用介面可以提高類的靈活性,將注入的 抽象出來放入介面裡這樣就不只是order類可以寫入資料庫了,其他的類如果也想寫入資料庫去實現介面即可。本篇 與前兩篇結構一樣,只是多了個注入用的介面 sqlserverdal acc...