gpt4 book ai didi

android - 如何在 Kotlin 中使用 anko 删除除最新 10 条记录之外的所有记录?

转载 作者:IT老高 更新时间:2023-10-28 13:42:35 24 4
gpt4 key购买 nike

代码B定义了一个Log表,希望清空除了最近10条记录以外的所有记录。

目前,我先按 CreatedDate 顺序列出所有记录,然后从第 11 条记录循环到最后一条记录,并使用 Code A 删除记录。

在 Kotlin 中使用 anko 有更好的方法吗?

代码 A

fun deleteDBLogByID(_id:Long)=mDBLogHelper.use{
delete(DBLogTable.TableNAME,"$idName = {$idName} ","$idName" to _id.toString() )
}

代码 B

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

companion object {
val DB_NAME = "log.db"
val DB_VERSION = 1
val instance by lazy { DBLogHelper() }
}

override fun onCreate(db: SQLiteDatabase) {
db.createTable( DBLogTable.TableNAME , true,
DBLogTable._ID to INTEGER + PRIMARY_KEY+ AUTOINCREMENT,
DBLogTable.CreatedDate to INTEGER,
DBLogTable.Status to INTEGER +DEFAULT("0"),
DBLogTable.Description to TEXT
)
}

}

最佳答案

在下面的位置检查相同的源代码

https://github.com/Kotlin/anko/blob/e388295c70963d97d26820d4ecdf48ead8dba05e/anko/library/static/sqlite/src/Database.kt#L73

函数定义也需要一个whereClause

fun SQLiteDatabase.delete(tableName: String, whereClause: String = "", vararg args: Pair<String, Any>): Int {
return delete(tableName, applyArguments(whereClause, *args), null)
}

你也可以在下面的 SO 线程中看到

How to delete rows in SQLite with multiple by where args using Anko?

现在结合上面和下面的 SO 线程

Delete all but top n from database table in SQL

WHERE id NOT IN (SELECT id FROM table ORDER BY id LIMIT n);

你可以像下面这样做

delete(TABLE_NAME, whereClause = "WHERE _ID NOT IN (SELECT _ID FROM {TABLE_NAME} ORDER BY CreatedDate Desc LIMIT {TOP})", 
"TOP" to 10,
"TABLE_NAME" to TABLE_NAME)

如果上述方法不起作用,则可能需要进行小的微调,但该方法应该有效。我没有 Kotlin 设置来测试和确认相同的内容。但是,如果您遇到问题,可以提供反馈

关于android - 如何在 Kotlin 中使用 anko 删除除最新 10 条记录之外的所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50288360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com