提问者:小点点

如何在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)
        }
    }
}

我的数据只有“名称”键


共2个答案

匿名用户

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

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()
}

用将数据添加到数据库的代码替换占位符

匿名用户

您必须在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)
} 

这只执行一次。