Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Room SQLite_错误没有这样的表_Android_Sqlite_Dao_Android Room - Fatal编程技术网

Android Room SQLite_错误没有这样的表

Android Room SQLite_错误没有这样的表,android,sqlite,dao,android-room,Android,Sqlite,Dao,Android Room,我正在尝试使用,在执行以下操作后,我在尝试构建应用程序时出现以下错误: 错误:(23,27)错误:查询有问题:[SQLITE\u Error]SQL错误或缺少数据库(没有这样的表:屏幕项目) 名称很好,应该存在。在进行更改后,我清理了项目,并确保它已从设备上完全卸载 在我的活动中我正在用这一行初始化onCreate中的内容: db = AppDatabase.getDatabase(getApplicationContext()); 这是我的密码: AppDatabase @Database(

我正在尝试使用,在执行以下操作后,我在尝试构建应用程序时出现以下错误:

错误:(23,27)错误:查询有问题:[SQLITE\u Error]SQL错误或缺少数据库(没有这样的表:屏幕项目)

名称很好,应该存在。在进行更改后,我清理了项目,并确保它已从设备上完全卸载

在我的
活动中
我正在用这一行初始化
onCreate
中的内容:

db = AppDatabase.getDatabase(getApplicationContext());
这是我的密码:

AppDatabase

@Database(entities = {PermitItem.class}, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
  public static String DATABASE_NAME = "my_database";
  public final static String TABLE_ITEMS = "screen_items";

  private static AppDatabase INSTANCE;

  public abstract PermitItemDao permitItemModel();

  public static AppDatabase getDatabase(Context context) {
    if (INSTANCE == null) {
        INSTANCE = Room.databaseBuilder(context, AppDatabase.class, DATABASE_NAME).allowMainThreadQueries().build();
    }
    return INSTANCE;
  }

  public static void destroyInstance() {
    INSTANCE = null;
  }
}
许可证

@Entity
public class PermitItem {
  @PrimaryKey(autoGenerate = true)
  public final int id;
  private String posX, posY, width, height, content, type;

  public PermitItem(int id, String posX, String posY, String width, String height, String content, String type) {
    this.id = id;
    this.posX = posX;
    this.posY = posY;
    this.width = width;
    this.height = height;
    this.content = content;
    this.type = type;
  }

  public static PermitItemBuilder builder(){
    return new PermitItemBuilder();
  }

  public static class PermitItemBuilder{
    int id;
    String posX, posY, width, height, content, type;


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


    public PermitItemBuilder setPosX(String posX) {
        this.posX = posX;
        return this;
    }


    public PermitItemBuilder setPosY(String posY) {
        this.posY = posY;
        return this;
    }


    public PermitItemBuilder setWidth(String width) {
        this.width = width;
        return this;
    }


    public PermitItemBuilder setHeight(String height) {
        this.height = height;
        return this;
    }


    public PermitItemBuilder setContent(String content) {
        this.content = content;
        return this;
    }


    public PermitItemBuilder setType(String type) {
        this.type = type;
        return this;
    }

    public PermitItem build() {
        return new PermitItem(id, posX, posY, width, height, content, type);
    }
  }

  public long getId() {
    return id;
  }

  public String getPosX() {
    return posX;
  }

  public void setPosX(String posX) {
    this.posX = posX;
  }

  public String getPosY() {
    return posY;
  }

  public void setPosY(String posY) {
    this.posY = posY;
  }

  public String getWidth() {
    return width;
  }

  public void setWidth(String width) {
    this.width = width;
  }

  public String getHeight() {
    return height;
  }

  public void setHeight(String height) {
    this.height = height;
  }

  public String getContent() {
    return content;
  }

  public void setContent(String content) {
    this.content = content;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  @Override
  public String toString() {
    return "PermitItem{" +
            "id=" + id +
            ", posX='" + posX + '\'' +
            ", posY='" + posY + '\'' +
            ", width='" + width + '\'' +
            ", height='" + height + '\'' +
            ", content='" + content + '\'' +
            ", type='" + type + '\'' +
            '}';
  }


}
许可证MDAO

@Dao
public interface PermitItemDao {

  @Insert(onConflict = OnConflictStrategy.REPLACE)
  long addPermitItem(PermitItem permitItem);

  @Query("select * from " + TABLE_ITEMS)
  ArrayList<PermitItem> getAllPermitItems();

  @Query("select * from " + TABLE_ITEMS + " where id = :id")
  PermitItem getPermitItemById(int id);

  @Update(onConflict = OnConflictStrategy.REPLACE)
  void updatePermitItem(PermitItem permitItem);

  @Query("delete from " + TABLE_ITEMS)
  void removeAllPermitItems();
}
@Dao
公共接口许可证{
@插入(onConflict=OnConflictStrategy.REPLACE)
长附加PermitItem(PermitItem PermitItem);
@查询(“选择*自”+表项)
ArrayList getAllPermitItems();
@查询(“从“+表项+”中选择*,其中id=:id”)
PermitItem getPermitItemById(内部id);
@更新(onConflict=OnConflictStrategy.REPLACE)
无效更新PermitItem(PermitItem PermitItem);
@查询(“从”+表项中删除)
void removeallpermitems();
}

房间名称表与其关联实体相同。在DAO中,
TABLE_ITEMS
需要是
PermitItem
,因为您的实体是
PermitItem
。或者,将
tableName
属性添加到
@Entity
注释中,以告诉房间其他名称用于该表。

此错误的另一个原因可能是该实体未列在AppDatabase.java文件中:

    @Database(entities = {XEntity.class, YEntity.class, ZEntity.class}, 
version = 1, exportSchema = true)

确保数据库文件夹中有最新的db文件,如果导出架构,请确保app\schemas下的.json架构文件已正确更新。

在我的例子中,问题的原因是使用了错误的表名。我为模型类选择的表名与类名不同。我在查询数据访问对象接口时错误地使用了类名

@Query("SELECT * FROM tablename")
检查表名,确保它们与模型类中注释的表名匹配


我希望这有帮助。快乐的编码

如果刚刚添加了一个新表,只需更新数据库类(扩展RoomDatabase()类的那个类)并更新entities注释即可

@Database(entities = [User::class, NewTableHere::class], version = 1)
abstract class AppDatabase : RoomDatabase() {

希望它能帮你节省搜索答案的时间,快乐地编码。

看到这些文章对我帮助很大。 我有这个错误数据库(entities={Folder.class},version=1,exportSchema=false)

只需添加我的其他类
@数据库(entities={Folder.class,url.class},version=1,exportSchema=false)

我的问题是
表名
:|||
我用错误的单词写了我的表名:(((

为什么
SQLiteHandler
存在?定义
screen\u项的文件室实体在哪里?
AppDatabase
SQLiteHandler
都在尝试使用同一个数据库文件吗?当然,它并没有,因为教程中没有,但我把它放回去,认为我可能需要它来创建ta(s)Room创建表,作为设置和使用
AppDatabase
的一部分。您试图访问
屏幕项目的代码在哪里?啊,很公平,我现在已经完全删除了它,问题仍然存在。这是每个
@Query
标记。我在
PermiteMDAO
中为每个标记获取一个错误日志谢谢你!现在一切正常..我的主键也被设置为
int
,但只有
long
工作非常感谢你提到了tableName属性这就是我的工作方式;我没有将类添加到实体列表中;很容易错过