SQLite建表AUTOINCREMENT语法错误导致插入数据时应用崩溃
问题描述
Android应用开发过程中出现数据库操作崩溃:用于输入待存储数据的EditText控件位于第二个Activity,点击添加按钮跳转至该Activity后,执行数据添加操作时应用崩溃,系统抛出错误:
AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY in CREATE TABLE OPERATION_TABLE
问题原因
崩溃的直接原因是建表SQL语句存在拼写错误:定义主键ID字段时,将SQLite要求的INTEGER类型错拼为INTGER(缺失字母E),SQLite无法识别该字段为合法的INTEGER类型主键,因此抛出AUTOINCREMENT关键字仅允许作用于INTEGER主键的错误。
修复方案
- 修正SQLiteHelper类中onCreate方法的建表语句拼写错误,同时修正布尔字段的类型定义(SQLite无原生BOOL类型,布尔值实际以INTEGER类型的0/1存储),修正后的代码如下:
public void onCreate(SQLiteDatabase db) { String createTableStatement = "CREATE TABLE " + OPERATION_TABLE + " (" + " ID INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_OPERATION_NAME + " TEXT, " + COLUMN_OPERATION_AMOUNT + " TEXT, " + COLUMN_OPERATION_DESCRIPTION + " TEXT, " + COLUMN_OPERATION_IS_INCOME + " INTEGER, " + COLUMN_DATE + " TEXT )"; db.execSQL(createTableStatement); }
- 让新的表结构生效,二选一即可:
- 调试阶段直接卸载设备上已安装的旧版本应用,重新运行安装即可
- 迭代正式版本时,升级数据库的版本号,在
onUpgrade方法中删除旧表后重新调用onCreate创建新表,避免覆盖安装时旧表结构残留。
注:提供的按钮点击监听代码、addOne数据插入方法逻辑不存在触发本次崩溃的问题,无需额外修改。
内容的提问来源于stack exchange,提问作者Abdulhadi Heib
相关产品推荐
相关产品推荐

