SQLite开发拾遗

前端之家收集整理的这篇文章主要介绍了SQLite开发拾遗前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

最近,在使用sqlite3进行GIS开发。使用sqlite3作为数据库引擎,存储空间数据。但不是使用OGC标准,也不是类似Oracle Saptial的管理模式,而是自定义的数据管理方式、Geometry模型。在开发过程中,遇到的点点滴滴都记录下来,以备今后赏析。

sqlite 分页查询

写法1:

SELECT * FROM TABLE 1 LIMIT 20 OFFSET 20 ;

写法2:

SELECT * FROM TABLE1 LIMIT 20 , 20;

sqlite 文件的压缩
在多次删除数据、插入数据、更新数据后,数据库体积增大,但实际有效数据量很小,则需要对数据库进行压缩、整理,把已经删除的数据从物理文件中移除。调用一下sql命令即可:

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.h文件中列出,即未对外公开。这些函数中,都使用了MultiByteToWideChar()、WideCharToMultiByte()两个函数实现字符间转换。

所以,可以将几个函数,放入sqlite3.def、sqlite3.h,使其导出DLL使用,提供给二次开发者调用。但是,还有一个问题:转换后的字符串内存释放。以上函数转换出的字符串都是使用malloc()、free()两个标准库函数进行内存分配、释放。一但在sqlite3的DLL中得到转换后的字符串,也需要在此DLL中释放,否则将引起程序错误。因此,在sqlite3的库中,添加了utf8Free(void *)函数,负责释放字符串占用的内存。

原文链接:https://www.f2er.com/sqlite/202854.html

猜你在找的Sqlite相关文章