Android Sqlite 数据库 db.exec() 在 SQL 文本中返回语法错误
Posted
技术标签:
【中文标题】Android Sqlite 数据库 db.exec() 在 SQL 文本中返回语法错误【英文标题】:Android Sqlite Database db.exec() is returning syntax error in the SQL text 【发布时间】:2021-10-08 15:58:37 【问题描述】:我正在使用 SQLiteOpenHelper 为我的 android 应用程序创建一个 SQLite 数据库。当我运行一个函数来更新数据库中的数据 ( db.exec(....) ) 时,我收到一个语法错误,并显示以下消息:
E/SQLiteLog: (1) "VARCHAR" 附近: "INSERT INTO" 中的语法错误 Switch_Database (Switch_Name VARCHAR, Switch_Status INTEGER) 值 (“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")
【问题讨论】:
第一个代码块(changeSwitchValue 函数)是调用错误的地方。它说“靠近 VARCHAR” 【参考方案1】:从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()")
但是,向表中插入新行的推荐且安全的方法是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()")
【讨论】:
以上是关于Android Sqlite 数据库 db.exec() 在 SQL 文本中返回语法错误的主要内容,如果未能解决你的问题,请参考以下文章