【问题标题】:android.database.sqlite.SQLiteException: no such table: table_nameandroid.database.sqlite.SQLiteException:没有这样的表:table_name
【发布时间】:2023-03-27 17:46:01
【问题描述】:

对于同样的错误有很多假设的解决方案。

以下是我尝试过但都失败的方法:

⚫ 清理项目然后重建

⚫ 删除数据库并重新创建

⚫更改数据库版本号

⚫ 确保语法正确,即使是简单的东西

⚫应用设置->删除所有数据->卸载->重试

错误

android.database.sqlite.SQLiteException: no such table: Item (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM Item

SQLITE 代码

package com.example.flipdb;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class DBHelper extends SQLiteOpenHelper {

    private static String name = "mydb.db";
    private static int version = 4;

    public DBHelper(@Nullable Context context) {
        super(context, name, null, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE Item (nomeid TEXT , quantidade INTEGER , compra INTEGER, venda INTEGER, margem INTEGER);";
        String sql2 = "CREATE TABLE Investimentos (id INTEGER , precocompra INTEGER , precovendaestimado INTEGER, datacompra DATE, datavendaestimado DATE, quantidade INTEGER NOT NULL, nomeid_item TEXT NOT NULL REFERENCES Item(nome) );";
        db.execSQL(sql);
        db.execSQL(sql2);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String sql = "DROP TABLE IF EXISTS Item;";
        db.execSQL(sql);
    }

    public long Insert_Item(String nomeid, Integer quantidade, Integer compra, Integer venda, Integer margem){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("nomeid", nomeid);
        cv.put("quantidade", quantidade);
        cv.put("compra", compra);
        cv.put("venda", venda);
        cv.put("margem", margem);
        return db.insert("Item", null, cv);
    }

    public long Insert_Investimentos(Integer id, Integer precocompra, Integer precovendaestimado, String datacompra, String datavendaestimado, Integer quantidade, String nomeid_item){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("id", id);
        cv.put("precocompra", precocompra);
        cv.put("precovendaestimado", precovendaestimado);
        cv.put("datacompra", datacompra);
        cv.put("datavendaestimado", datavendaestimado);
        cv.put("quantidade", quantidade);
        cv.put("nomeid_item", nomeid_item);
        return db.insert("Investimentos", null, cv);
    }

    public long Update_Item(String nomeid, Integer quantidade){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("quantidade", quantidade);
        return db.update("Item", cv, "nomeid=?", new String[] {nomeid});
    }

    public long Update_Investimentos(String id, Integer precovendaestimado, String datavendaestimado, Integer quantidade){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("precovendaestimado", precovendaestimado);
        cv.put("datavendaestimado", datavendaestimado);
        cv.put("quantidade", quantidade);
        return db.update("Investimentos", cv, "id=?", new String[] {id});
    }

    public long Delete_Item(String nomeid){
        SQLiteDatabase db = getWritableDatabase();
        return db.delete("Item", "nomeid=?", new String[] {nomeid});
    }

    public long Delete_Investimentos(String id){
        SQLiteDatabase db = getWritableDatabase();
        return db.delete("Investimentos", "id=?", new String[] {id});
    }

    public Cursor Select_All_Item(){
        SQLiteDatabase db = getWritableDatabase();
        return db.rawQuery("SELECT * FROM Item", null);
    }

    public Cursor Select_All_Investimentos(){
        SQLiteDatabase db = getWritableDatabase();
        return db.rawQuery("SELECT * FROM Investimentos", null);
    }

}

希望我能得到一些帮助,因为我真的努力让它工作,它需要工作,谢谢。 谁读到这里,有什么要求,我都会提供。

【问题讨论】:

  • 您是否在全新安装或升级时遇到异常?
  • @MohammedAbdulBari 启动时致命异常
  • 崩溃的一个原因可能是 onUpgrade 方法,因为它会删除项目表,如果您只关心全新安装,请摆脱该方法
  • 删除表后记得在onUpgrade中再次调用onCreate

标签: android sql sqlite


【解决方案1】:

我找到了我正在寻找的解决方法

转到您的 AndroidManifest.xml 并更改以下内容

android:allowBackup="true"    ->   android:allowBackup="false"

【讨论】:

  • 这解决了您的问题,仅适用于全新安装,但是如果您从旧版本的应用程序更新到新版本,它仍然会崩溃,您应该巩固您的数据库逻辑和迁移.
猜你喜欢
  • 2016-08-23
  • 1970-01-01
  • 2013-10-03
  • 2011-10-09
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多