今天給各位分享sqlite3手機版的知識,其中也會對sqlite3緩存,參數進行解釋,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在開始吧!
sqlite3緩存,參數
Sqlite緩存參數在下文中查詢:數據庫一般運行在嵌入式環境中,需要兼顧性能和硬件資源。
SQLite使用PRAGMA命令在SQLite環境內控制各種環境變量和狀態標志。一個PRAGMA值可以被讀取,也可以根據需求進行設置。主要介紹幾個在嵌入式開發中經常使用的關鍵參數。
synchronous
synchronousPragma獲取或設置當前磁盤的同步模式,該模式控制積極的SQLite如何將數據寫入物理存儲。也就是說該參數控制何時執行sync指令。
Pragma值描述0或OFF不進行同步。1或NORMAL在關鍵的磁盤操作的每個序列后同步。2或FULL在每個關鍵的磁盤操作后同步。
當synchronous設置為FULL(2),SQLite數據庫引擎在緊急時刻會暫停以確定數據已經寫入磁盤。這使系統崩潰或電源出問題時能確保數據庫在重起后不會損壞。為了保證數據的安全性,該項建議設置為FULL。
journal_mode
journal_modePragma獲取或設置控制日志文件如何存儲和處理的日志模式。
Pragma值描述DELETE默認模式。在該模式下,在事務結束時,日志文件將被刪除。TRUNCATE日志文件被階段為零字節長度。PERSIST日志文件被留在原地,但頭部被重寫,表明日志不再有效。MEMORY日志記錄保留在內存中,而不是磁盤上。OFF不保留任何日志記錄。
首先補充一個知識點,SQLite中日志模式主要有DELETE和WAL兩種,其中WAL(Writeaheadlogging)是一種日志模式,它是一種思想,普遍應用于關系型數據庫。每個事務執行變更時,修改數據頁,同時會產生日志,這樣在事務提交后,不需要將修改的臟頁刷盤,只需要將事務產生的日志落盤即可返回。WAL保證日志一定先于對應的臟頁落盤,就是所謂的WAL。
DELETE模式采用影子分頁技術(Shadowpaging),DELETE模式下,日志中記錄的變更前數據頁內容;WAL模式下,日志中記錄的是變更后的數據頁內容。事務提交時,DELETE模式將日志刷盤,將DB文件刷盤,成功后,再將日志文件清理;WAL模式則是將日志文件刷盤,即可完成提交過程。
建議將journal_mode設置為delete,當數據寫入數據庫有失敗動作時,透過journal檔案予以復原到未更動前(原始)數據,來確保數據完整與一致性。如果在每次寫入的時間很長或頻繁的進行數據庫寫入情況下,因系統(主機)電力不穩或突然斷電時,那么下次重新啟動,而journal檔案若存在,則在開啟SQLite數據庫時,若發現有journal檔案的存在,便會對數據庫做Rollback動作(還原)。
journal_size_limit
默認值為-1,表示沒有限制,單位是字節。
DELETE模式下,當日志增長超過閥值時,則進行截斷。default_journal_size_limit,用于設置日志文件的默認大小。
cache_size
cache_sizePragma可獲取或暫時設置在內存中頁面緩存的最大尺寸。
pages值表示在緩存中的頁面數。內置頁面緩存的默認大小為2,000頁,最小尺寸為10頁。每頁使用約1.5K內存,若需要使用改變大量多行的UPDATE或DELETE命令,并且不介意SQLite使用更多的內存的話,可以增大緩存以提高性能。建議設置為2000即可。
auto_vacuum
auto_vacuumPragma獲取或設置auto-vacuum模式。
Pragma值描述0或NONE禁用Auto-vacuum。這是默認模式,意味著數據庫文件尺寸大小不會縮小,除非手動使用VACUUM命令。1或FULL啟用Auto-vacuum,是全自動的。在該模式下,允許數據庫文件隨著數據從數據庫移除而縮小。2或INCREMENTAL啟用Auto-vacuum,但是必須手動激活。在該模式下,引用數據被維持,自由頁面只放在自由列表中。這些頁面可在任何時候使用incremental_vacuumpragma進行覆蓋。
正常情況下,當提交一個從數據庫中刪除數據的事務時,數據庫文件不改變大小。未使用的文件頁被標記并在以后的添加操作中再次使用。這種情況下使用VACUUM命令釋放刪除得到的空間。但是Vacuum的效率非常低!建議設置成NONE(0),定時手動進行VACUUM操作。
voiddb_config(sqlite3*db)
{
intret;
char*errmsg=NULL;
system("sync");
ret=db_sql_exec(db,"pragmajournal_mode=delete;",&errmsg);
if(ret!=SQLITE_OK)
{
fprintf(stderr,"configdbwalerror:%s\n",errmsg);
sqlite3_free(errmsg);
}
ret=db_sql_exec(db,"pragmasynchronous=FULL;",&errmsg);
if(ret!=SQLITE_OK)
{
fprintf(stderr,"configdbsynchronouserror:%s\n",errmsg);
sqlite3_free(errmsg);
}
ret=db_sql_exec(db,"pragmajournal_size_limit=409600;",&errmsg);
if(ret!=SQLITE_OK)
{
fprintf(stderr,"configdbjournal_size_limiterror:%s\n",errmsg);
sqlite3_free(errmsg);
}
ret=db_sql_exec(db,"PRAGMAcache_size=2000",&errmsg);
if(ret!=SQLITE_OK)
{
fprintf(stderr,"configdbcache_sizeerror:%s\n",errmsg);
sqlite3_free(errmsg);
}
ret=db_sql_exec(db,"PRAGMAauto_vacuum=NONE;",&errmsg);
if(ret!=SQLITE_OK)
{
fprintf(stderr,"configdbauto_vacuumerror:%s\n",errmsg);
sqlite3_free(errmsg);
}
}
參考:
https://blog.csdn.net/tietao/article/details/6890350
https://www.runoob.com/sqlite/sqlite-pragma.html
http://www.it165.net/database/html/201310/4691.html
https://blog.csdn.net/zhaofuguang/article/details/91882073
sqlite3命令怎么打開一個創建好了的數據庫
看你用什么調試了如果用電腦的虛擬機eclipse:DDMS--data-data-項目名-這個忘了--數據庫名字.db控制臺:adbshell--cddata/data/項目名/忘了/數據庫文件導出可以使用工具查看數據庫文件了如果使用的平板電腦或者手機調試的話:默認情況下數據庫建立在項目文件目錄以下的目錄中具體忘記了。想查看必須獲取平板或手機的root權限。也可以指定數據庫路徑。
sqlite3在linux下怎么編譯
然后使用交叉編譯器編譯,然后install到一個文件夾下,把install的內容拷貝到開發板文件系統的/usr或者/usr/local目錄下
python27下怎么用sqlite3
肯定不是放在Lib目錄下的,好像放在python目錄下就可以了。具體記不清楚了,好久以前用過,樓主可以嘗試下剛親自嘗試了下如果樓主用的是python2.7的話,還需要下載一個python和數據庫sqlite的接口pysqlite-2.6.3.win32-py2.7這個要安裝。數據庫sqlite從網上下載后,直接把EXE文件放在C:/PTHON27目錄下就可以了。
我已經在delphi中鏈接上sqlite3的數據庫,運用的是zeosAccess控件,我怎么添加數據進去
你要么用sql語句的insert插數據,要么用sqllite的管理器,比如SQLiteGUI、SQLiteSpy或者SqliteMgr等等都可以。
OK,本文到此結束,希望對大家有所幫助。