Kotlin中SQLiteOpenHelper插入数据失败问题求助
问题分析与解决方案
核心问题:建表SQL语法错误
你的SQLiteHelper中onCreate方法的建表语句存在字段名与数据类型之间缺少空格的语法错误,导致表未正确创建,最终插入数据失败,返回-1并显示“Note not added”。
错误的建表语句片段:
val createTblNotes = ("CREATE TABLE " + TBL_NOTES + "(" + ID + "INTEGER PRIMARY KEY," + TITLE + "TEXT," + TEXT + "TEXT," + FAVOURITE + "INTEGER" + ")")
这里ID + "INTEGER"会拼接成idINTEGER,SQL无法识别该字段定义,直接导致表创建失败。
修复步骤
1. 修正建表SQL语句
在每个字段名和数据类型之间添加空格,同时推荐给主键加上AUTOINCREMENT实现ID自增:
override fun onCreate(db: SQLiteDatabase?) { val createTblNotes = ("CREATE TABLE " + TBL_NOTES + "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + TITLE + " TEXT," + TEXT + " TEXT," + FAVOURITE + " INTEGER" + ")") db?.execSQL(createTblNotes) }
2. 优化insertNote方法(可选但推荐)
由于ID设置为自增主键,无需手动传入ID值,删除手动设置ID的代码,避免无效ID导致插入失败:
fun insertNote(note:Note) : Long{ val db : SQLiteDatabase = this.writableDatabase val contentValues = ContentValues() contentValues.put(TITLE, note.title) contentValues.put(TEXT, note.text) contentValues.put(FAVOURITE, note.favourite) val success = db.insert(TBL_NOTES, null, contentValues) db.close() return success }
3. 重置数据库(必须操作)
之前错误的建表语句已生成无效数据库文件,需卸载App或清除App数据,让onCreate方法重新执行,创建正确的表结构。
额外调试建议
可在insertNote中添加日志,查看具体错误信息:
val success = db.insert(TBL_NOTES, null, contentValues) if (success == -1) { Log.e("SQLiteError", "插入失败: ${db.lastErrorMsg}") }
内容的提问来源于stack exchange,提问作者ISO
相关产品推荐
相关产品推荐

