You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:52:43