Android使用SQLite时无法alter table的一个玄学原因

最近因为一些需求,需要经常给sqlite表添加列或者删除列。然而很奇怪的是,下列语句执行不会报错,但打开表查看后发现根本没有执行到:

db_usr.execSQL("alter table "+DATABASEINFO.USRTABLE_NAME+ " add column " + name + " integer");

然而下列语句可以成功执行,只不过新列的数据类型为空

db_usr.execSQL("alter table "+DATABASEINFO.USRTABLE_NAME+ " add column " + name + "integer");
//因为integer前面忘了打空格

google很久没有结果后,快要放弃挣扎的我注意到,虽然SQLite说是对大小写不敏感,但系统设置SQLite的数据类型时习惯是大写。于是试着把integer改成了INTEGER:

db_usr.execSQL("alter table "+DATABASEINFO.USRTABLE_NAME+ " add column " + name + " INTEGER");

就成功了………………至于为什么目前还是不清楚。

最近也总结了一些在开发安卓时会让SQLite出错的比较低级但初学者容易犯的错误:

  1. 在连接字符串时少打空格。比如"add column"+NAME+"integer"。应为"add column "+NAME+" INTEGER"。
  2. 不习惯大写建表语句(然后可能会出现上述问题)
  3. 从前是SQL使用者可能会习惯性在数据类型上写Boolean,String, Int之类。然而SQLite的数据类型不长这样。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载,觉得这篇写 SQLAlchemy Core,写得非常不错。不过后续他没写SQLAlchemy ORM... ...
    非梦nj阅读 5,468评论 1 14
  • 说明 本文是作者Lefe所创,转载请注明出处,如果你在阅读的时候发现问题欢迎一起讨论。本文会不断更新。 正文 对于...
    Lefe阅读 3,973评论 1 18
  • SQL SELECT 语句 一、查询SQL SELECT 语法 (1)SELECT 列名称 FROM 表名称 (2...
    有钱且幸福阅读 5,542评论 0 33
  • 使用的过程根据使用的函数大致分为如下几个过程: sqlite3_open() sqlite3_prepare() ...
    随风飘荡的小逗逼阅读 6,678评论 0 3
  • 今天,我差点丢了命,不知道是不是有人保佑着我,还是阎王怜悯我,我捡了条命。 我很想和你说我今天的事,也很想和你...
    烊光阅读 227评论 0 1