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
.
因此,在 MainActivity
的 onCreate()
中,您检查 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>
替换为您将数据添加到数据库的代码。
我是一名 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
.
因此,在 MainActivity
的 onCreate()
中,您检查 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>
替换为您将数据添加到数据库的代码。