У меня есть база данных SQlite
в приложении для Android, разработанном в kotlin. В этой базе данных я храню объекты этого 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
, который база данных автоматически выдаст. В некоторых руководствах я нашел, как создать обработчик базы данных, и сделал это так:
класс обработчика базы данных
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
, так как я не добавил объект в данные base, я вызываю функцию insertData
, и объект успешно сохраняется в базе данных, но столбец id
содержит -1
для всех элементов. У меня вопрос, как я могу скопировать столбец raw_id
в столбец id
?