android SQLite数据库,按插入先后顺序排序

背景

开发app时,有个界面使用了RecyclerView来展示多条数据,并且是以插入数据的先后顺序来展示。所以,在存入数据库时,最好也是以插入的先后顺序来存储。但是SQLite数据库默认不是按插入顺序排序,而是根据主键升序排序。如果在插入时不指定主键primary key,则会随机分配id,也达不到我想要的效果。

因此,这里提供一种解决思路:在数据库的表中增加一个插入时间属性。插入每条数据时,同时记录插入时的时间。在查询数据时,就按照插入时间升序排序即可。

一、数据库表增加insertTime属性

PersonDatabaseHelper.kt

import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper

class PersonDatabaseHelper(val context: Context, name: String, version: Int) :
    SQLiteOpenHelper(context, name, null, version) {
    
    
    private val createPerson = "create table Person (" +
            "id integer primary key," +
            "callId text," +
            "name text," +
            "image Blob," +
            "callFree boolean," +
            "insertTime text)" // 插入时间属性
    override fun onCreate(db: SQLiteDatabase) {
    
    
        db.execSQL(createPerson)
    }
    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
    
    
        db.execSQL("drop table if exists Person")
        onCreate(db)

    }
}

二、插入数据时添加插入时间

插入数据的Activity中添加以下代码,我这里是EditPersonActivity :

class EditPersonActivity : BaseActivity() {
    
    
	// ActivityEditPersonBinding需替换为自己的Activity databinding
	private val binding by lazy {
    
     ActivityEditPersonBinding.inflate(layoutInflater) }
	private lateinit var dbHelper : PersonDatabaseHelper

	override fun onCreate(savedInstanceState: Bundle?) {
    
    
	        // personList是我的数据库
	        dbHelper = PersonDatabaseHelper(this, "personList.db", 2)
	        initView()
	        // ...
	}
	
	private fun initView() {
    
    
		// ...
	    binding.run {
    
    
	    	// btnEditTrue按钮的点击事件就是向personList表插入一条数据
	        btnEditTrue.setOnClickListener {
    
    
	            val db = dbHelper.writableDatabase
	            val values = ContentValues().apply {
    
    
	                // 给values的多个属性赋值
	                put("insertTime", getNow())
	            }
	            // Person是personList.db数据库中的表
	            db.insert("Person", null, values)
	            finish()
	        }
	        // ...
	    }
	    // ...
	}
	
	/**
	getNow 输出格式:2023-01-08 19:34:39.734
	**/
	private fun getNow(): String {
    
    
        return if (android.os.Build.VERSION.SDK_INT >= 24){
    
    
            SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(Date())
        }else{
    
    
            val tms = Calendar.getInstance()
            tms.get(Calendar.YEAR).toString() + "-" +
                    tms.get(Calendar.MONTH).toString() + "-" +
                    tms.get(Calendar.DAY_OF_MONTH).toString() + " " +
                    tms.get(Calendar.HOUR_OF_DAY).toString() + ":" +
                    tms.get(Calendar.MINUTE).toString() +":" +
                    tms.get(Calendar.SECOND).toString() +"." +
                    tms.get(Calendar.MILLISECOND).toString()
        }
    }
}

三、查询数据时,根据插入时间排序

查询数据的Activity中添加以下代码:

// insertTime asc 是关键,即按insertTime升序排序。拓展一下:desc是降序排序
val cursor = db.query("Person", null, null, null, null, null, "insertTime asc")

结果

插入几条数据后的Person表:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40466537/article/details/128764142
今日推荐