android.database.sqlite.SQLiteException:没有这样的表:table_name

Posted

技术标签:

【中文标题】android.database.sqlite.SQLiteException:没有这样的表:table_name【英文标题】:android.database.sqlite.SQLiteException: no such table: table_name 【发布时间】:2021-05-14 19:09:51 【问题描述】:

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

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

⚫ 清理项目然后重建

⚫ 删除数据库并重新创建

⚫更改数据库版本号

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

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

错误

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 【参考方案1】:

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

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

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

【讨论】:

这解决了您的问题,仅适用于全新安装,但是如果您从旧版本的应用程序更新到新版本,它仍然会崩溃,您应该巩固您的数据库逻辑和迁移.

以上是关于android.database.sqlite.SQLiteException:没有这样的表:table_name的主要内容,如果未能解决你的问题,请参考以下文章