应用程序在尝试检索 ID 自动递增 Android 时失败

问题描述 投票:0回答:1

我试图根据自动增量“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 列?

android sql kotlin sqlite auto-increment
1个回答
0
投票

您的问题与 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
    }
}

主要修复:

  1. 查询更正:使用 SELECT MAX(id) AS max_id FROM 传感器。
  2. 访问别名: 获取 max_id 而不是 id。
  3. 游标管理:始终关闭游标以避免内存泄漏。

对于新插入,可以直接使用SQLite的insert()方法,该方法返回最后插入的ID:

val rowId = db.insert("sensor", null, contentValues)
© www.soinside.com 2019 - 2024. All rights reserved.