SQLite開發拾遺

2021-09-30 06:11:36 字數 1556 閱讀 2245

最近,在使用sqlite3進行gis開發。使用sqlite3作為資料庫引擎,儲存空間資料。但不是使用ogc標準,也不是類似oracle saptial的管理模式,而是自定義的資料管理方式、geometry模型。在開發過程中,遇到的點點滴滴都記錄下來,以備今後賞析。

sqlite 分頁查詢

寫法1:

select

* from table

1 limit 

20offset 20;

寫法2:

select

*from

table1

limit

20,

20;

sqlite 檔案的壓縮vacuum

表清空

sqlite目前並不支援truncate命令,可以用一下命令代替:

delete from table1;

自增字段

在sqlite3中,如果欄位被宣告為 integer primary key autoincrement,則此字段為autoincrement型別,字段值自增;

insert記錄時,不需要對此字段賦值。

create table table1(id integer primary key autoincrement, name text);

insert into table1(null, 'jacky');

sqlite3_last_insert_rowid()函式可以獲取剛插入記錄的自增字段值。

資料插入與更新

使用replace替代insert、update命令。在無滿足條件記錄,則執行insert,有滿足條件記錄,則執行update。

replace into table1(col1, col2, col3) values(val1, val2,val3);

還需要測試與insert into、update比較的效率如何。

字元編碼轉換

sqlite3的原始碼中,提供了utf8tounicode()、unicodetoutf8()、mbcstounicode()、unicodetombcs()、sqlite3_win32_mbcs_to_utf8 ()、utf8tombcs ()等8個函式進行字元在不同編碼間的轉換,但未在sqlite3.def、sqlite3.**件中列出,即未對外公開。這些函式中,都使用了multibytetowidechar()、widechartomultibyte()兩個函式實現字元間轉換。

所以,可以將幾個函式,放入sqlite3.def、sqlite3.h,使其匯出dll使用,提供給二次開發者呼叫。但是,還有乙個問題:轉換後的字串記憶體釋放。以上函式轉換出的字串都是使用malloc()、free()兩個標準庫函式進行記憶體分配、釋放。一但在sqlite3的dll中得到轉換後的字串,也需要在此dll中釋放,否則將引起程式錯誤。因此,在sqlite3的庫中,新增了utf8free(void *)函式,負責釋放字串占用的記憶體。

asp知識拾遺

最近做的乙個小 碰到了許多問題,能解決的都解決了,還有的沒辦法就找了替代的解決辦法.下面收集一下 1 在選擇了一系列的checkbox後的提交表單提交後,會獲取到name1,逗號,空格,name2,逗號,空格,結果,系統需要獲取這些值,我用了以下 實現.uname request.form user...

Linux同步拾遺

一般情況下,執行緒在主題函式退出的時候會自動終止,但同時也可以因為接收到另乙個執行緒發來的終止請求而強制終止。執行緒取消的方法是向目標執行緒發cancel訊號,但如何處理cancel訊號則由目標執行緒自己決定,或者忽略,或者立即終止,或者繼續執行到cancelation point 取消點 由不同c...

面試拾遺 1

本文用來把我面試時遇到的沒有弄明白的問題記錄下來。一 資料庫的normalization與denormalization normalization的目的之一是減少冗餘的過程,之二是方便資料庫查詢語言的使用。什麼叫做方便資料庫查詢語言的使用呢?也就是消除update,insertion及deleti...