SQLiteDatabase如何只记录一次?

How to make record just one time in SQLiteDatabase?

我是一名 android 开发人员。当应用程序是 运行 时,有没有办法只将数据放入 SQLiteDatabase 一次?在我的 MainActivity 中,重复数据在 运行 应用程序时不断累积。我希望在用户启动应用程序时仅添加一次数据。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val db = MyDatabaseHelper(this)

        db.createRamen(MyData(1))
        db.createRamen(MyData(2))
        db.createRamen(MyData(3))
        db.createRamen(MyData(4))
        ...
    }
...
}

[编辑]

class RamenDatabaseHelper(var context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
    companion object {
        private val DATABASE_NAME = "MyDatabase"
        private val DATABASE_VERSION = 1
        private val TABLE_NAME = "MyTable"
    }

    private val KEY_ID = "id"
    private val KEY_NAME = "name"

    override fun onCreate(db: SQLiteDatabase?) {
        val CREATE_TABLE = "CREATE TABLE IF NOT EXISTS $TABLE_NAME($KEY_ID INTEGER PRIMARY KEY, $KEY_NAME TEXT)"
        db!!.execSQL(CREATE_TABLE)
    }

    override fun onUpgrade(db: SQLiteDatabase?, old: Int, new: Int) {
        if (old >= new) {
            db!!.execSQL("DROP TABLE IF EXISTS $TABLE_NAME")
            onCreate(db)
        }
    }
}

我的数据只有“name”键

必须在RamenDatabaseHelper的onCreate函数中添加insert语句

override fun onCreate(db: SQLiteDatabase?) {
    val CREATE_TABLE = "CREATE TABLE IF NOT EXISTS $TABLE_NAME($KEY_ID INTEGER PRIMARY KEY, $KEY_NAME TEXT)"
    db!!.execSQL(CREATE_TABLE)
    val CREATE_TABLE = "INSERT INTO $TABLE_NAME VALUES ($ID_YOU_NEED_TO_INSERT, $NAME)"
    db!!.execSQL(CREATE_TABLE)
} 

这只执行一次。

在数据库中添加数据的代码只执行一次的一种方法是使用 SharedPreferences.
因此,在 MainActivityonCreate() 中,您检查 SharedPreferences 是否存在某个 Boolean 值并且它是 true
如果它不存在,则将数据添加到数据库,然后将 Boolean 值设置为 true in SharedPreferences
如果它存在,则不会发生任何事情,因为这不是该应用程序第一次 运行.

val sp: SharedPreferences = getSharedPreferences("MyAppPreferences", MODE_PRIVATE)
if (!sp.getBoolean("First", false)) {
    <your code here>
    val ed = sp.edit()
    ed.putBoolean("First", true)
    ed.apply()
}

将占位符 <your code here> 替换为您将数据添加到数据库的代码。