Android Sqlite 数据库 db.exec() 在 SQL 文本中返回语法错误

Android Sqlite Database db.exec() is returning syntax error in the SQL text

我正在使用 SQLiteOpenHelper 为我的 Android 应用创建 SQLite 数据库。当我 运行 更新数据库中数据的函数 ( db.exec(....) ) 时,我收到语法错误并显示以下消息:

E/SQLiteLog: (1) near "VARCHAR": syntax error in "INSERT INTO Switch_Database (Switch_Name VARCHAR, Switch_Status INTEGER) VALUES ('SpotifySwitch', 1)

我确定这只是一个小的语法错误,但我花了很多时间也没有找到答案。我会很感激一些帮助。

函数如下:

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

上面是我的本地值:

private val TABLE_NAME = "Switch_Database"
    private val SWITCH_TABLE_NAME_COLUMN = "Switch_Name"
    private val SWITCH_TABLE_ISCHECKED_COLUMN = "Switch_Status"
    private val TAG = "DatabaseHelper"

和我的创建函数:

override fun onCreate(db: SQLiteDatabase?) {
    if(db != null) {
        //called when db created for the first time
        val sql =
            "CREATE TABLE $TABLE_NAME (switch_id INTEGER PRIMARY KEY AUTOINCREMENT, $SWITCH_TABLE_NAME_COLUMN VARCHAR(20) NOT NULL, $SWITCH_TABLE_ISCHECKED_COLUMN INTEGER)"
        db.execSQL(sql)
        addBasicData(db)
        return
    }
    Log.i(TAG,"DB is null in OnCreate() function")
}

INSERT 语句中删除数据类型:

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()}")
}

但是,向 table 插入新行的推荐安全方法是 insert()ContentValues:

fun changeSwitchValue(switchName: String, status: Int) {
    val db: SQLiteDatabase = this.writableDatabase
    val values = ContentValues().apply {
        put(SWITCH_TABLE_NAME_COLUMN, switchName)
        put(SWITCH_TABLE_ISCHECKED_COLUMN, status)
    }
    db.insert(TABLE_NAME, null, values)
    Log.i(TAG, "Active Switches array now is: ${queryActiveSwitches()}")
}