我试图根据自动增量“id”整数获取sqlite数据库/表中最后添加或插入的记录,但我的应用程序不断崩溃。
这是我的 Kotlin 代码。
@SuppressLint("Range")
fun getLast(): Int {
val db = databaseHelper.readableDatabase
val cursor = db.rawQuery("SELECT * FROM sensor WHERE MAX(id)",null)
if (cursor.count>0) {
cursor.movetofirst()
return cursor.getInt(cursor.getColumnIndex("id")) <---- FAILS and app crashes.
}
}
指向违规的箭头是我的应用程序失败的原因。
但是,在其他函数中,我对不同的列执行了完全相同的操作,并且完全没有问题,如下所示。
// iterate through the cursor and add the data to the list
while (cursor.moveToNext()) {
val Sensor_name = cursor.getString(cursor.getColumnIndex("sensor_name")) <----- This line works.
val Sensor_reading = cursor.getString(cursor.getColumnIndex("sensor_reading")) <----- This line works.
list.add(Sensor(Sensor_name, Sensor_reading))
}
那么,如何在 Kotlin 中使用 SQL 从 SQLite 数据库/表中搜索和检索自增 ID 列?
您的问题与 SQL 查询有关。使用这个固定方法:
@SuppressLint("Range")
fun getLast(): Int {
val db = databaseHelper.readableDatabase
val cursor = db.rawQuery("SELECT MAX(id) AS max_id FROM sensor", null)
return if (cursor.moveToFirst()) {
val id = cursor.getInt(cursor.getColumnIndex("max_id"))
cursor.close()
id
} else {
cursor.close()
-1 // Default if no rows exist
}
}
主要修复:
对于新插入,可以直接使用SQLite的insert()方法,该方法返回最后插入的ID:
val rowId = db.insert("sensor", null, contentValues)