Articles of android room

如何将现有的SQLite应用程序迁移到Room Persistance Library?

提问可能有点早,但是有可能以及如何将现有的SQLite数据库应用程序迁移/升级到新的Android Room Persistance Library吗?

房间迁移:“没有这样的表:room_table_modification_log”

房间1.1.0版。 迁移后第一次运行时出现此错误。 如果我关闭应用程序并再次启动它,它运行良好。 ROOM: Cannot run invalidation tracker. Is the db closed? java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed. at android.database.sqlite.SQLiteConnectionPool.throwIfClosedLocked(SQLiteConnectionPool.java:1182) at android.database.sqlite.SQLiteConnectionPool.waitForConnection(SQLiteConnectionPool.java:792) at android.database.sqlite.SQLiteConnectionPool.acquireConnection(SQLiteConnectionPool.java:518) Caused By : SQL(query) error or missing database. (no such table: room_table_modification_log (code 1): , while compiling: DELETE FROM proposals WHERE hotel_id = ?) ################################################################# […]

Android room persistent library – TypeConverter错误错误:无法弄清楚如何将字段保存到数据库“

由于错误,我无法在房间内创建typeConverter。 我似乎每个文档都遵循一切。 我想将列表转换为json字符串。 让我们来看看我的实体: @Entity(tableName = TABLE_NAME) public class CountryModel { public static final String TABLE_NAME = “Countries”; @PrimaryKey private int idCountry; /* I WANT TO CONVERT THIS LIST TO A JSON STRING */ private List countryLang = null; public int getIdCountry() { return idCountry; } public void setIdCountry(int idCountry) { this.idCountry = idCountry; } […]

会议室数据库迁移无法正确处理ALTER TABLE迁移

Java.lang.IllegalStateException 迁移没有正确处理用户(therealandroid.github.com.roomcore.java.User)。 预期: TableInfo {name =’user’,columns = {name = Column {name =’name’,type =’TEXT’,notNull = false,primaryKeyPosition = 0},age = Column {name =’age’,type =’INTEGER ‘,notNull = true,primaryKeyPosition = 0},id = Column {name =’id’,type =’INTEGER’,notNull = true,primaryKeyPosition = 1}},foreignKeys = []}find: 发现 TableInfo {name =’user’,columns = {name = Column {name =’name’,type =’TEXT’,notNull = false,primaryKeyPosition = 0},id = Column […]

如何在运行时动态查询房间数据库?

问题 是否有可能在运行时构造一个查询? 用例 @Query(“SELECT * FROM playlist ” + “WHERE playlist_title LIKE ‘% :playlistTitle %’ ” + “GROUP BY playlist_title ” + “ORDER BY playlist_title ” + “LIMIT :limit”) List searchPlaylists(String playlistTitle, int limit); limit部分是可选的。 也就是说,它应该能够在有或没有限制的情况下执行相同的查询。 一个更复杂的用例 在前一种情况下,可以使用和不使用限制部分进行两个静态查询,并且每次都可以使用适当的一个。 但有时我们可能不得不处理更复杂的情况,例如构建filter。 在这种情况下,与前面的示例不同,将有多个可选部件。 对于书籍表,我们可能需要根据书籍所属的类别,作者姓名,价格范围,出版日期等进行过滤。使用这些部分的所有组合进行静态查询几乎是不可能的。

Room数据库中具有相同types对象的多个表

我正在使用Room作为应用程序的数据库。 我有一个场景,其中某种types的Object需要存储在单独的表中。 举个例子,让我们拿一个名为Book.java的Object 现在,我想要两个SQL表: Books_Read Books_To_Read 请忽略SQL DB的任何命名约定 – 这只是一个例子 问题 通常,只需在Book.java类中使用@Entity(tableName = “Books_Read”)并使用一个将使用该表名的DAO类。 事情是; 那么我怎样才能使用相同的Book.java类存储在Books_To_Read表中? 因为我已经将@Entity(tableName = “Books_Read”)为Book.java类的一部分,所以我看不到在哪里为Book.java类定义Books_To_Read表 我能够想出的唯一解决方案是创建一个新类 – 让我们称之为BookToRead.java ,它扩展了Book.java并定义了@Entity(tableName = “Books_To_Read”)中的一个新Book.java和@Entity(tableName = “Books_To_Read”) 。类。 题 有没有更好的方法来做到这一点,或者这是处理它的预期方法?

由于多个构造函数是合适的错误,因此无法选择构造函数

我尝试在我的android kotlin项目中实现持久库,但在编译时捕获此错误: 错误:由于多个构造函数适合,Room无法选择构造函数。 尝试用@Ignore注释不需要的构造函数。 错误代码: @Entity data class Site( var name: String = “”, var url: String = “”, @PrimaryKey(autoGenerate = true) var id: Long = 0)

具有AutoValue的Android Room Persistence库实体

可以在同一个POJO上使用Room持久性库的@Entity和AutoValue的@AutoValue和构建器吗? 我该怎么办?

房间 – 选择IN状态的查询?

是否可以在Room中使用SQLite的IN条件? 我正在尝试从我的数据库中选择一个项目列表,其中某列的值(在本例中为TEXT列)与一组filter值中的任何一个匹配。 根据我的知识,这很容易在SQL和SQLite中完成,只需在SELECT语句中添加IN条件( 参见此处 )。 但是,我似乎无法与Room合作。 我一直收到这个错误: Error:(70, 25) error: no viable alternative at input ‘SELECT * FROM Table WHERE column IN :filterValues’ (DAO @Query -annotated方法的输入称为filterValues ) 我现在尝试了三种不同的方法: 将参数作为List传递 将参数作为String[]传递 最后将参数简单地传递给String ,但格式为(value_1, value_2, …, value_n) 特别是最后一个应该很容易,因为它将(或至少它应该)直接转换为SELECT * FROM Table WHERE column IN (value_1, value_2, …, value_n) ,这是你手动的确切方式如果您只是直接访问数据库,请写出SELECT 。

Android Room编译时警告外​​键中的列不是索引的一部分。 这是什么意思?

我正在使用最近在Google I / O上宣布的Android架构组件的Android房间持久性库。 事情似乎有效,但我收到以下错误: 警告:tagId列引用外键但它不是索引的一部分。 每当修改父表时,这可能会触发全表扫描,因此强烈建议您创建一个涵盖此列的索引。 我的数据库有3个表: Note , Tag和JoinNotesTags 。 对标记的注释是多对多关系,因此JoinNotesTags表用于处理映射。 表格很简单: Note.id和Tag.id都是主键 JoinNotesTags.noteId引用Note.id JoinNotesTags.tagId引用Tag.id 外键约束在JoinNotesTags表上定义。 作为参考,这是JoinNotesTags表的CREATE TABLE语句: “CREATE TABLE IF NOT EXISTS `JoinNotesTags` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `noteId` INTEGER, `tagId` INTEGER, FOREIGN KEY(`noteId`) REFERENCES `Note`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`tagId`) REFERENCES `Tag`(`id`) ON UPDATE NO […]