>

SQlite 가있다  kotlin에서 개발 된 안드로이드 앱의 데이터베이스. 이 데이터베이스에는이 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 포함  모든 사람들에게. 내 질문은 어떻게 raw_id 를 복사 할 수 있습니까   id 의 열  열?

  • 답변 # 1

    왜 정확히 같은 값을 저장하는 두 개의 열이 있습니까? 그런 다음 권장하지 않는 ID를 조작하지 않는 한

    하나의 raw_id 열에 액세스하는 것이 더 효율적입니다. 공간을 낭비하지 않고 더 많은 데이터를 캐시 할 수 있습니다.

    데이터베이스에 객체를 추가하지 않았기 때문에 raw_id를 알지 못했기 때문에 귀하의 의도에 대한 단서가에 있다고 생각합니다.기본적으로 알고 싶습니다.id는 무엇인가요? 다음은id(raw_id) :-

    를 검색하는 방법입니다.

    삽입에서 반환 된 값을 검색하고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 - 피카소는 ImageView에 URL을로드하지 않습니다 값을 전달할 때 생성자를 던집니다
  • 다음 java - JPanel 내부의 이미지와 텍스트 사이의 공백을 제거하는 방법은 무엇입니까?