最近因为一些需求,需要经常给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出错的比较低级但初学者容易犯的错误:
- 在连接字符串时少打空格。比如"add column"+NAME+"integer"。应为"add column "+NAME+" INTEGER"。
- 不习惯大写建表语句(然后可能会出现上述问题)
- 从前是SQL使用者可能会习惯性在数据类型上写Boolean,String, Int之类。然而SQLite的数据类型不长这样。