【Android】データベース更新に失敗する

Andoirdアプリでデータベース更新を下記の様に SQLiteDatabase#execSQL で行っていて、エミュレータで動かしていた時は上手くいっていたのですが、実機で動かすと SQLException が発生しました。

val helper = MySQLiteOpenHelper(this)
val database = helper.writableDatabase

// 更新するSQL文
val sql = """
UPDATE sample_table 
SET (age, sex) = (20, '男') 
WHERE name = '太郎'"""

database.beginTransaction()
try {
	database.execSQL(ngSql)
	database.setTransactionSuccessful()
} catch (ex: SQLException) {
	Log.e("SQLException", ex.message)
} finally {
	database.endTransaction()
	database.close()
}
SQLException: near "(": syntax error (code 1)

SQL文を下記の様に変更したところ実機でも動くようになりました。

val sql = """
UPDATE sample_table 
SET age = 20,
sex = '男'
WHERE name = '太郎'"""

デバッグに使っていたエミュレータのAPIレベルは26(Android 8.0)、実機が24(Android 7.0)だったので他のAPIレベルでも試したところ、どうやらAPIレベル25以下では列と値それぞれを括弧でまとめて書くSQL文には対応していないみたいです。

スポンサーリンク

フォローする