You need to enable JavaScript to run this app. Android SQLite调用execSQL插入数据时VARCHAR附近报语法错误如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Android SQLite调用execSQL插入数据时VARCHAR附近报语法错误如何解决?

问题原因

你编写的INSERT SQL语句不符合语法规范:INSERT语句的字段列表仅需要填写字段名,字段类型是建表阶段声明的内容,不需要在插入语句里重复指定。你在$SWITCH_TABLE_NAME_COLUMN后多加了VARCHAR、在$SWITCH_TABLE_ISCHECKED_COLUMN后多加了INTEGER,就是触发语法报错的直接原因。

修复代码

直接删除插入语句中字段名后的类型声明即可:

fun changeSwitchValue(switchName: String, status: Int) {
        val db: SQLiteDatabase = this.writableDatabase
        db.execSQL(
            "INSERT INTO $TABLE_NAME ($SWITCH_TABLE_NAME_COLUMN, $SWITCH_TABLE_ISCHECKED_COLUMN) VALUES ('$switchName', $status)"
        )
        Log.i(TAG, "Active Switches array now is: ${queryActiveSwitches()}")
    }
更优实现方案

直接拼接SQL字符串存在SQL注入风险,且容易出现语法错误,更推荐使用官方提供的insertAPI实现插入操作,不需要手动编写SQL:

fun changeSwitchValue(switchName: String, status: Int) {
    val db = writableDatabase
    val contentValues = ContentValues().apply {
        put(SWITCH_TABLE_NAME_COLUMN, switchName)
        put(SWITCH_TABLE_ISCHECKED_COLUMN, status)
    }
    // 返回值为新插入行的ID,返回-1则代表插入失败
    val insertResult = db.insert(TABLE_NAME, null, contentValues)
    Log.i(TAG, "插入结果:$insertResult,Active Switches array now is: ${queryActiveSwitches()}")
}

内容的提问来源于stack exchange,提问作者Binyamin Robbins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 13:00:03