我在用 kotlin 开发的 android 应用程序中有一个 SQlite
数据库。在这个数据库中,我存储了这个 class
class Device_info
class Device_info {
var id : Int = 0
var name : String = ""
constructor(id : Int, name: String){
this.id = id
this.name = name
}
}
现在我想在 id
变量中存储数据库将自动提供的 raw_id
。我在一些教程中找到了如何创建数据库处理程序,我已经这样做了
data base handler class
import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
private const val DATABASE_NAME = "Devices_db"
private const val TABLE_NAME = "Devices"
private const val RAW_ID = "raw_id"
private const val COLUMN_NAME = "name"
private const val COLUMN_ID = "id"
class DataBaseHandler(var context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, 1) {
override fun onCreate(db: SQLiteDatabase?) {
val createTable = "CREATE TABLE " + TABLE_NAME + "(" + RAW_ID +
" INTEGER PRIMARY KEY, " + COLUMN_NAME + " TEXT, " +
COLUMN_ID + "INTEGER)"
db?.execSQL(createTable)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {}
fun insertData(device: Device_info){
val db = this.writableDatabase
val cv = ContentValues()
cv.put(COLUMN_ID, device.id)
cv.put(COLUMN_NAME, device.name)
db.insert(TABLE_NAME, null, cv)
db.close()
}
fun readData() : MutableList<Device_info>{
val list : MutableList<Device_info> = ArrayList()
val db = this.readableDatabase
val query = "Select * from " + TABLE_NAME
val result = db.rawQuery(query, null)
if(result.moveToFirst()){
do{
val device = Device_info()
device.id = result.getString(result.getColumnIndex(COLUMN_ID)).toInt()
device.name = result.getString(result.getColumnIndex(COLUMN_NAME)
list.add(device)
}while(result.moveToNext())
}
result.close()
db.close()
return list
}
fun UpdateId(device: Device_info){
val db = this.readableDatabase
val cv = ContentValues()
cv.put(COLUMN_ID, device.id)
db.update(TABLE_NAME, cv, "id = " + device.id, null)
db.close()
}
fun UpdateName(device: Device_info){
val db = this.readableDatabase
val cv = ContentValues()
cv.put(COLUMN_NAME, device.name)
cv.put(COLUMN_ID, device.id)
db.update(TABLE_NAME, cv, "id = " + device.id, null)
db.close()
}
fun deleteData(device: Device_info){
val db = this.writableDatabase
val cv = ContentValues()
cv.put(COLUMN_ID, device.id)
cv.put(COLUMN_NAME, device.name)
db.delete(TABLE_NAME, "id = " + device.id, null)
db.close()
}
}
所以在我通过在构造函数中传递名称和作为 id
-1
创建对象之后,因为当时我不知道 raw_id
因为我没有在数据库中添加对象,所以我调用函数 insertData
并且对象成功存储在数据库中但是列 id
包含所有元素的 -1
。我的问题是如何复制 id
列中的 raw_id
列?
最佳答案
为什么有两列存储完全相同的值?除非您随后要操纵不推荐的 ID。
仅访问一列 raw_id 会更有效率。它不会浪费空间,它会允许缓存更多数据等等。
我想关于您的 Intent 的线索在因为当时我不知道 raw_id 因为我还没有在数据库中添加对象因为您基本上想知道id 是什么。以下是您检索 id (raw_id) 的方法:-
您检索从 insert 返回的值并从 insertData 方法返回该值。
类似的东西:-
fun insertData(device: Device_info): Long{
val db = this.writableDatabase
val cv = ContentValues()
cv.put(COLUMN_ID, device.id)
cv.put(COLUMN_NAME, device.name)
val rv = db.insert(TABLE_NAME, null, cv)
db.close()
return rv
}
关于android - 如何使用 kotlin 将一列复制到 SQlite 数据库中的另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54138156/