【问题标题】:How to get max _id value of a SQLite table using Anko with Kotlin?如何使用 Anko 和 Kotlin 获取 SQLite 表的最大 _id 值?
【发布时间】:2018-11-18 02:44:59
【问题描述】:

DBRecordTable._IDINTEGER + PRIMARY_KEY+ AUTOINCREMENT,我希望得到一个表的最大_id值,如果表中没有数据行则返回零。

我尝试写代码select(tableName,DBRecordTable._ID).orderBy(DBRecordTable._ID, Desc).limit(1),但是不正确,如何解决?

代码

class DBRecordHandler(private val mDBHelper: DBRecordHelper =DBRecordHelper.instance,
                      private val tableName:String =DBRecordTable.TableNAME,
                      private val idField:String=DBRecordTable._ID
                      ) {

 fun getMaxID():Long=mDBHelper.use{
      var myList=select(tableName,DBRecordTable._ID).orderBy(DBRecordTable._ID, Desc).limit(1); 
 }

}



class DBRecordHelper(mContext: Context = UIApp.instance) : ManagedSQLiteOpenHelper(mContext, DB_NAME, null, DB_VERSION) {

    companion object {
        const val DB_NAME = "record.db"
        const val DB_VERSION = 5
        val instance by lazy { DBRecordHelper() }
    }

    override fun onCreate(db: SQLiteDatabase) {
        db.createTable( DBRecordTable.TableNAME , true,
            DBRecordTable._ID to INTEGER + PRIMARY_KEY+ AUTOINCREMENT,           
            DBRecordTable.CreatedDate to INTEGER
        )
    }   

}

【问题讨论】:

  • 谢谢,但我希望用 Anko 来做。
  • 你可以试试 select(tableName,DBRecordTable._ID).whereargs(SELECT MAX(DBRecordTable._ID) FROM tableName)

标签: android database sqlite kotlin anko


【解决方案1】:

你可以使用SQLMAX()函数找到表格内容的最大id:

private fun getMaxID(): Int {
    var maxId = 0
    mDBHelper?.use {
        select(DBRecordTable.TableNAME, "MAX(${DBRecordTable._ID}) as maxId").exec {
            moveToNext()
            maxId = getInt(getColumnIndex("maxId"))
        }
    }
    return maxId
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 2021-09-17
  • 2020-04-20
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
相关资源
最近更新 更多