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 文件的压缩 表清空 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 *)函数,负责释放字符串占用的内存。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |