首页 > 解决方案 > 没有这样的表:TableName(代码1):,编译时:SELECT * FROM TableName

问题描述

我正在尝试使用房间数据库删除表,然后在我的表上执行 Select Query。

问题是它有一次正确地执行了查询。但另一次它抛出了下面的异常

Fatal Exception: android.database.sqlite.SQLiteException: no such table: TableName (code 1): , while compiling: SELECT * FROM TableName

下面是删除表的代码

    @Query("DELETE FROM TableName")
    public void delete_table();

选择查询

    @Query("SELECT * FROM TableName")
    public LiveData<List<Table>> getAllValues();

该表的模型类

@Entity(tableName = "TableName")
public class Table {


    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "LID")
    private int id;

    @ColumnInfo(name = "LOC_NAME")
    private String loc_name;

    public Table(){

    }

    public Table(String loc_name) {
        this.loc_name = loc_name;
    }

  public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getLoc_name() {
        return loc_name;
    }

    public void setLoc_name(String loc_name) {
        this.loc_name = loc_name;
    }
}

房间数据库类

@Database(entities = {Table.class}, version = 2)
public abstract class RoomDB extends RoomDatabase {

    public static final String DATABASE_NAME = "db-name";

    
    public abstract DataBaseDao getDatabaseDao();
    private static RoomDB instance;


    public static DataBaseDao getInstance(Context context){
        if (instance == null){
            synchronized (GoBumprRoomDB.class){
                if (instance==null){
                    instance = Room.databaseBuilder(context, RoomDB.class, DATABASE_NAME).fallbackToDestructiveMigration().build();
                }
            }
        }
        return instance;
    }

}

DAO 类

@Dao
public interface DataBaseDao {

    @Query("SELECT * FROM TableName")
    public LiveData<List<Table>> getAllValues();

    @Query("DELETE FROM TableName")
    public void delete_table();

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    public void insertIntoTable(List<Table> tableList);
}

我从 Rest 调用中获取值,然后将其存储在房间数据库中

    public void addListOfTable(List<Table> tables) {
        
        dao.insertIntoTable(tables);

    }


    public void deleteTable() {
        
         dao.deleteTable();
           
    }

请帮助我如何解决此问题。

我正在使用房间数据库

标签: androidandroid-sqliteandroid-roomsqliteopenhelper

解决方案


我想问题是你将你的房间数据库类传递给你的数据库而不是实体本身,要解决这个问题,你需要执行以下操作

@Database(entities = {Table.class}, version = 2) /// put Table.class instead


推荐阅读