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()}")
}
我正在使用 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()}")
}