sqlite3 bind BLOB資料的插入與查詢

2021-10-12 12:51:44 字數 1510 閱讀 6540

sqlite3_bind_text 中繫結的指標,在sqlite3_step 時必須存在,不能釋放,否則會是亂碼

sqlite3_bind_blob中繫結的指標,在sqlite3_step 時必須存在,不能釋放,否則會是亂碼

sqlite3_bind_int 、sqlite3_bind_double 繫結臨時變數是可以的,因為傳的是值

void test_parameter_binding()

//2. 引數繫結的情況下插入多條資料。

string strsqlwithparameter = 「insert into testtable values(?)」;

sqlite3_prepare_v2(…, strsql);

for (int i = 0; i < max_rows; ++i)

sqlite3_finalize(prepared_stmt);

}

這裡首先需要說明的是,sql語句」insert into testtable values(?)」中的問號(?)表示引數變數的

佔位符,該規則在很多關係型資料庫中都是一致的,因此這對於資料庫移植操作還是比較方便

的。通過上面的示例**可以顯而易見的看出,引數繫結寫法的執行效率要高於每次生成不同的

sql語句的寫法,即2)在效率上要明顯優於1),下面是針對這兩種寫法的具體比較:

1. 單單從程式表面來看,前者在for迴圈中執行了更多的任務,比如字串的填充、sql語句

的prepare,以及prepared_statement物件的釋放。

2. 在sqlite的官方文件中明確的指出,sqlite3_prepare_v2的執行效率往往要低於

sqlite3_step的效率。

3. 當插入的資料量較大時,後者帶來的效率提公升還是相當可觀的。

sqlite3_get_table,效率低下,而且官方推薦使用sqlite3_prepare_v2替代

sqlite插入資料效率最快的方式就是:開啟事務  +   insert語句  +  關閉事務(提交)

利用事務的互斥性,如果在批量的插入操作前顯式地開啟一次事務,在插入操作結束後,提交事務,那麼所有的操作將只執行一次事務,大大地提高io效率

開啟事務和提交事務時預設的,如果不顯式寫出來,將在每次insert語句前開啟事務,insert語句後提交,如果執行insert語句1000萬次,那麼將自動開啟並提交1000萬次!!

事務(transaction)具有以下四個標準屬性,通常根據首字母縮寫為 acid:

使用下面的命令來控制事務:

事務控制命令只與 dml 命令 insert、update 和 delete 一起使用。他們不能在建立表或刪除表時使用,因為這些操作在資料庫中是自動提交的。

sqlite3_exec可以執行任何sql語句,包括事務( "begin transaction" )、回滾( "rollback")和提交("commit")等等。 

菜鳥教程 sqlite

使用sqlite3 模組操作sqlite3資料庫

python內建了sqlite3模組,可以操作流行的嵌入式資料庫sqlite3。如果看了我前面的使用 pymysql 操作mysql資料庫這篇文章就更簡單了。因為它們都遵循pep 249,所以操作方法幾乎相同。廢話就不多說了,直接看 吧。都差不多,首先匯入模組,然後建立連線,然後獲取游標物件,之後利...

sqlite 模糊匹配日期 SQLite3模糊查詢

如果你還沒有安裝或者使用過 sqlite,可以借助 sqlite3 安裝 基本操作 入門。1.建立資料庫 test.db cd sqlite3 test.db 這 如果你還沒有安裝或者使用過 sqlite,可以借助 sqlite3 安裝 基本操作 入門。1.建立資料庫 test.db cd sqli...

sqlite3 命令介紹

用sqlite3建立資料庫的方法很簡單,只要在shell下鍵入 以下 符號為shell提示號,請勿鍵入 sqlite3 foo.db 進入了sqlite3之後,會看到以下文字 sqlite version 3.1.3 enter help for instructions sqlite 這時如果使用...