最近,在使用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命令即可:
表清空
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 *)函数,负责释放字符串占用的内存。
总结以上是内存溢出为你收集整理的SQLite开发拾遗全部内容,希望文章能够帮你解决SQLite开发拾遗所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)