sqlite庫學習(6)sqlite快速插入
1、介紹
SQLite數據庫本質上來講就是一個磁盤上的文件,所以一切的數據庫操作其實都會轉化為對文件的操作,而頻繁的文件操作將會是一個很好時的過程,會極大地影響數據庫存取的速度。例如:向數據庫中插入100萬條數據,在默認的情況下如果僅僅是執行query.exec(“insert into DataBase(……) values(……)”);就會打開和關閉文件100萬次,所以速度當然會很慢。
SQLite數據庫是支持事務操作的,于是我們就可以通過事務來提高數據庫的讀寫速度。事務的基本原理是:數據庫管理系統首先會把要執行的sql語句存儲到內存當中,只有當commit()的時候才一次性全部執行所有內存中的數據庫。
2、測試
- 創建數據庫和表
const char* createTableSQL =
" CREATE TABLE TESTTABLE(int_col INT,float_col REAL ,string_col TEXT,ADDRESS char[50])";
- 準備工作
int insertCount =10;
const char* insertSQL = "INSERT INTO TESTTABLE(int_col,float_col,string_col,ADDRESS) VALUES(%d, %f, '%s', '%s');";
const char* testString ="this is test.";
const char* testAdd ="Is right?";
char sql[1024];
- 源碼
//顯示的開啟一個事物
sqlite3_stmt* stmt2 = NULL;
const char* beginSQL = "BEGIN TRANSACTION";
if (sqlite3_prepare_v2(conn, beginSQL, strlen(beginSQL), &stmt2, NULL) != SQLITE_OK)
{
if (stmt2)
sqlite3_finalize(stmt2);
sqlite3_close(conn);
return;
}
if (sqlite3_step(stmt2) != SQLITE_DONE)
{
sqlite3_finalize(stmt2);
sqlite3_close(conn);
return;
}
sqlite3_finalize(stmt2);
//構建基于綁定變量的插入數據
sqlite3_stmt *stmr3 = NULL;
if (sqlite3_prepare_v2(conn, intsertSQL, strlen(intsertSQL), &stmr3, NULL) != SQLITE_OK)
{
if (stmr3)
sqlite3_finalize(stmr3);
sqlite3_close(conn);
return;
}
//基于已有的SQL語句,迭代綁定不同的變量數據
for (int i = 0; i < insertCount; ++i)
{
sqlite3_bind_int(stmr3, 1, i);
sqlite3_bind_double(stmr3, 2, i*1.0);
sqlite3_bind_text(stmr3, 3, testString, strlen(testString), SQLITE_TRANSIENT);
sqlite3_bind_text(stmr3, 4, testAdd, strlen(testAdd), SQLITE_TRANSIENT);
if (sqlite3_step(stmr3) != SQLITE_DONE)
{
sqlite3_finalize(stmr3);
sqlite3_close(conn);
return;
}
//重新初始化該sqlite3_smrt綁定的變量
sqlite3_reset(stmr3);
printf("Insert Succeed.\n");
}
sqlite3_finalize(stmr3);
//提交之前的事物
const char* commitSQL = "COMMIT";
sqlite3_stmt * stmt4 = NULL;
if (sqlite3_prepare_v2(conn, commitSQL, strlen(commitSQL), &stmt4, NULL) != SQLITE_OK)
{
if (stmt4)
sqlite3_finalize(stmt4);
sqlite3_close(conn);
return;
}
if (sqlite3_step(stmt4) != SQLITE_DONE)
{
sqlite3_finalize(stmt4);
sqlite3_close(conn);
return;
}
sqlite3_finalize(stmt4);
智能推薦
SQLite
SQLite可視化工具sqlitebrowser,下載地址 http://sqlitebrowser.org/ Ubuntu/deepin安裝方式 打開數據庫文件 How to install sqlite3 查看版本 創建一個名為test.db 的數據庫 進入sqlite后 創建一個表 向mytable插入數據 查詢數據表 設置為列顯示模式 退出數據庫 重新進入test.db數據庫 查看數據庫信...
SQLite
相關參考鏈接為:http://blog.csdn.net/qq_28234213/article/details/72784331 http://www.cnblogs.com/Luoma_HaoWei/archive/2013/08/23/3278154.html 一、Ctrl+Z之后,在按回車,可以退出命令行界面。 二、 sqlite進入 ...> 狀態退出的方法: 此時是進入...
SQLite
前言 采用 SQLite 數據庫來存儲數據。SQLite 作為一中小型數據庫,應用 iOS 中,跟前三種保存方式相比,相對比較復雜一些。 注意:寫入數據庫,字符串可以采用 char 方式,而從數據庫中取出 char 類型,當 char 類型有表示中文字符時,會出現亂碼。 這是因為數據庫默認使用 ASCII 編碼方式。所以要想正確從數據庫中取出中文,需要用 NSString 來接收從數據庫取出的字符...
sqlite學習(1)編譯sqlite
Sqlite數據庫簡介 SQLite是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統。 它很小,只有sqlite3.h、sqlite3ext.h、sqlite3.c三個C語言文件。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,我...
猜你喜歡
android學習筆記----SQLite數據庫
目錄 用SQLite語句執行: 利用SQLiteDatabase中自帶的增刪改查操作: SQLite數據庫的事務介紹: 目錄一二的增刪改查源碼地址:https://github.com/liuchenyang0515/CreateDB3 目錄三事務介紹的源碼地址:https://github.com/liuchenyang0515/BankTransfer ...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...