Hel*_*oCW 7 android kotlin anko
代码B定义了一个Log表,我希望清除除最新10条记录之外的所有记录.
目前,我首先按CreatedDate列出所有记录,然后从第11条记录到最后一条记录进行循环,并使用代码A删除记录.
有没有更好的方法在Kotlin与anko做到这一点?
代码A.
fun deleteDBLogByID(_id:Long)=mDBLogHelper.use{
delete(DBLogTable.TableNAME,"$idName = {$idName} ","$idName" to _id.toString() )
}
Run Code Online (Sandbox Code Playgroud)
代码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
)
}
}
Run Code Online (Sandbox Code Playgroud)
在下面的位置检查相同的源代码
函数定义还需要一个whereClause
fun SQLiteDatabase.delete(tableName: String, whereClause: String = "", vararg args: Pair<String, Any>): Int {
return delete(tableName, applyArguments(whereClause, *args), null)
}
Run Code Online (Sandbox Code Playgroud)
你也可以在下面的SO线程中看到
如何使用 Anko 删除 SQLite 中具有多个 by where args 的行?
现在结合上面和下面的SO线程
WHERE id NOT IN (SELECT id FROM table ORDER BY id LIMIT n);
Run Code Online (Sandbox Code Playgroud)
你可以做如下的事情
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)
Run Code Online (Sandbox Code Playgroud)
如果上面的方法不起作用,则可能需要进行小的微调,但该方法应该有效。我没有 Kotlin 设置来测试和确认同样的情况。但如果您遇到问题,可以提供反馈
| 归档时间: |
|
| 查看次数: |
439 次 |
| 最近记录: |