android - 如何使用 kotlin 将一列复制到 SQlite 数据库中的另一列

标签 android database sqlite kotlin

我在用 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/

相关文章:

android - 在 Android 上 Context.getCacheDir() 似乎返回了一个我无法在其中创建子目录的目录

java - 创建一个按钮并以编程方式将其添加到 View 中

java - 用于 Java 数据库管理的开源库

.net - Entity Framework 中的复合键在 uwp 中使用 sqlite

android - SQLite Android 内部连接

java - 我的 DiffUtil 实现有什么问题?

python - 表名 SQL 语法错误

database - 您应该将当前应用程序状态存储在数据库中吗?

ruby-on-rails - Rails 多对多 SQLite3 错误

xcode - 从sqlite获取日期时需要帮助