【问题标题】:Problems with insertions after adding new tables to database将新表添加到数据库后的插入问题
【发布时间】:2020-04-17 13:57:55
【问题描述】:

更新:

override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
    if (oldVersion < 3) {
        db?.execSQL(ARTIGO_TABLE_NAME);
    }
    if (oldVersion < 3) {
        db?.execSQL(PAIS_TABLE_NAME);
        db?.execSQL("INSERT INTO $PAIS_TABLE_NAME values('PT','Portugal')")
    }
    if (oldVersion < 3) {
        db?.execSQL(POSTAL_TABLE_NAME);
    }

}

我最近试图添加新表,但在添加这些新表后,我的旧表中的插入不再起作用。

我已经清除了我的数据库并重新安装了应用程序,但是当我尝试将新数据(客户端)插入到我的旧表中时,它不起作用并且没有出现任何错误消息。

数据库代码(client 表是我的第一个表,其他是新表):

override fun onCreate(db: SQLiteDatabase?) {
    val CREATE_CLIENTES_TABLE = ("CREATE TABLE IF NOT EXISTS $CLIENTES_TABLE_NAME (" +
            "$DB_Cliente_Codigo  INTEGER UNIQUE PRIMARY KEY," +
            "$DB_Cliente_Nome VARCHAR(40)," +
            "$DB_Cliente_Morada VARCHAR(40)," +
            "$DB_Cliente_Localidade VARCHAR(30)," +
            "$DB_Cliente_Postal VARCHAR(8)," +
            "$DB_Cliente_Contribuinte VARCHAR(15)," +
            "$DB_Cliente_Telefone VARCHAR(15)," +
            "$DB_Cliente_Pais VARCHAR(3))")

    val CREATE_ARTIGO_TABLE = ("CREATE TABLE IF NOT EXISTS $ARTIGO_TABLE_NAME (" +
            "$DB_ARTIGO_CODIGO INTEGER UNIQUE PRIMARY KEY," +
            "$DB_ARTIGO_ABREVIADO VARCHAR (20), " +
            "$DB_ARTIGO_EXTENSO VARCHAR (45), " +
            "$DB_ARTIGO_FAMILIA INTEGER (3)," +
            "$DB_ARTIGO_IVA INTEGER (2)," +
            "$DB_ARTIGO_PRECO INTEGER," +
            "$DB_ARTIGO_PRECO_2 INTEGER," +
            "$DB_ARTIGO_PRECO_3 INTEGER )")

    val CREATE_PAIS_TABLE = ("CREATE TABLE IF NOT EXISTS $PAIS_TABLE_NAME (" +
            "$DB_ABR_PAIS  VARCHAR (3)," +
            "$DB_DESC_PAIS VARCHAR)")

    val CREATE_POSTAL_TABLE = ("CREATE TABLE IF NOT EXISTS $POSTAL_TABLE_NAME (" +
            "$DB_CODIGO_POSTAL VARCHAR (8)," +
            "$DB_DESCRICAO_POSTAL VARCHAR (30))")

    db?.execSQL(CREATE_CLIENTES_TABLE)
    db?.execSQL(CREATE_POSTAL_TABLE)
    db?.execSQL(CREATE_PAIS_TABLE)
    db?.execSQL(CREATE_ARTIGO_TABLE)
    db?.execSQL("INSERT INTO $PAIS_TABLE_NAME values('PT','Portugal')")

我没有改变我的方法来添加客户端,它是一样的,并且运行良好

fun addClient(mCtx: Context, clientes: clientes) {
    val values = ContentValues()
    values.put(DB_Cliente_Codigo, clientes.codigo_cliente)
    values.put(DB_Cliente_Nome, clientes.nome_cliente)
    values.put(DB_Cliente_Morada, clientes.morada_cliente)
    values.put(DB_Cliente_Localidade, clientes.localidade_cliente)
    values.put(DB_Cliente_Postal, clientes.postal_cliente)
    values.put(DB_Cliente_Contribuinte, clientes.contribuinte_cliente)
    values.put(DB_Cliente_Telefone, clientes.telefone_cliente)
    values.put(DB_Cliente_Pais, clientes.pais_cliente)
    val db = this.writableDatabase

    try {
        db.insert(CLIENTES_TABLE_NAME, null, values)
        Toast.makeText(mCtx, "Cliente Adicionado", Toast.LENGTH_SHORT).show()
    } catch (e: Exception) {
        Toast.makeText(mCtx, e.message, Toast.LENGTH_SHORT).show()

    }
    db.close()
}

【问题讨论】:

    标签: android sql database kotlin


    【解决方案1】:

    有时当您更改数据库架构而不更新版本时会发生这种情况。假设您首先创建了数据库并通过了版本 1。如果您下次更改数据库,则必须将版本从 1 更新到 2。试试这个,让我知道它是否有效。

    【讨论】:

    • 在尝试之前,我删除了数据库,以“重新启动”他,他不应该工作吗?或者当我创建一个新表时,即使我删除了 de DB 我也必须更新它?
    • 有时删除数据库效果不佳,因为我自己也经历过。我不知道这种行为背后的技术细节是什么。尝试更新版本,这可能会解决您的问题。
    • @NicolasSousa 这个答案对你有帮助吗?
    • 对不起朋友,我到家了我会修改测试,稍后我会回复你,抱歉让你久等了!
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2015-08-15
    • 2023-03-17
    • 2011-08-01
    相关资源
    最近更新 更多