Access 转 SQLite 注意事项

来源:互联网 发布:c ide推荐 知乎 编辑:程序博客网 时间:2024/04/29 05:24

最近将一个程序从Access修改为SQLite,需要调整的地方整理如下。

  1. Access 中可以直接使用数字开头的表名称, SQLite中不可以直接使用,表名要加双引号,例如 select *from "1table" (1table前后要加双引号, Access中不用加双引号)。
  2. SQLite中没有 now 函数,要用 datetime() 代替。
  3. Access 使用sql语句中使用 in [MS Access; database=***.mdb]来访问外部数据库,SQLite中要用 Attach database **.sdb as dbname语句先关联数据库,然后用 dbname.直接操作外部数据库,最后用 DETACH DATABASE dbname 取消附加数据库。
  4. Access建立表,自动增加字段是 Create Table tablename (ID IdEntity(1,1) PRIMARY KEY), SQLite中要用 Create Table tablename (ID INTEGER PRIMARY KEY AUTOINCREMENT)。
  5. Access 中的 select top 1 * from tablename, 在SQLite中要用 select * from limit 1
  6. SQLite的SQL语句中没有 iff 函数,要使用 case when then end代替。
  7. SQLite的SQL语句中没有switch 语句,要使用 case when then end代替。
  8. Access中可以修改表的类型,字段长度,SQLite中不可以,要修改需要建立一个临时表(字段类型、长度任意修改),将数据导入的临时表中,删除原来的表,将临时表改名。
  9. SQLite没有 isnull函数,用coalesce变通使用。
  10. Access 压缩数据库要用 CojetEngine.CompactDatabase(需要安装组件),SQLite只需要执行 vacuum 命令即可。
  11. Access 查询表是否存在的方法 select * from MySysObjects where type =1 and name=“表名”,而且需要在MySysObjects开通读取权限(默认是不开通的),SQLite使用 select * from sqlite_master where type ="表名"
  12. 获得最新插入数据的ID,ACCESS中使用 select @@IDENTITY,SQLite中使用 select LAST_INSERT_ROWID()。
  13. Access中的随机函数是 rnd(), SQLite中随机函数是 random()。
应该是还有不少不同的地方,我只是遇到了这些不同,以及相应的解决方法。

0 0