如何从 Room 数据库中获取 SQLite 数据库实例引用?
Posted
技术标签:
【中文标题】如何从 Room 数据库中获取 SQLite 数据库实例引用?【英文标题】:How to get the SQLite database instance reference from the Room database? 【发布时间】:2021-12-02 17:29:30 【问题描述】:我正在尝试从现有 Room 数据库中获取 SQLiteDatabase 实例,以便与许多已经开发的复杂函数一起使用,这些函数接受 SQLiteDatabase 实例作为参数。
我最近迁移到 Room,并决定在我的应用程序的一部分使用从 Room 迁移的功能时,不影响一些耗时且长时间处理的功能。(至少在我对 Room 越来越熟悉之前)。
我不确定这是否可能,如果我仍然能够获取 SQLite 数据库,那就太好了。我尝试使用以下代码检索数据库,但它给了我一个不可转换的错误。
public abstract class Database_ROOM extends RoomDatabase
public SQLiteDatabase getSQLiteDB()
return (SQLiteDatabase) this.mDatabase;
以上代码产生以下错误。 不可转换的类型;无法将 androidx.sqlite.db.supportSQLiteDatabase 转换为 android.database.sqlite.SQLiteDatabase
有没有其他方法可以获取数据库,或者这可能吗? 任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:有没有其他方法可以获取数据库,或者这可能吗?任何帮助将不胜感激。
对于房间,您可以通过 RoomDatabase getOpenHelper 通过 getWritableDatabase 方法获得SupportSQLiteDatabase(或 getReadableDatabase,但在几乎所有情况下您都会获得可写数据库)。
所以:-
public SupportSQLiteDatabase getSQliteDB()
return this.getOpenHelper().getWritableDatabase();
请注意,SupportSQLiteDatabase 具有 SQLiteDatabase 的大部分(但不是全部)功能和方法。
或者,如果您真的想要一个 SQLiteDatabase,那么您可以执行以下操作:-
public SQLiteDatabase getSQLiteDB(Context context, String databaseName)
return SQLiteDatabase.openDatabase(context.getDatabasePath(databaseName).getPath(),null,SQLiteDatabase.OPEN_READWRITE);
附加
关于评论:-
Cursor c = db.rawQuery("SELECT * FROM "+tableName+" WHERE 0", null); columnNames = c.getColumnNames(); tableName 作为函数参数出现。如果不按照您在第二个示例中的建议重新启动数据库,我找不到任何资源如何使用 Room 进行操作。
然后您可以使用 SupportSQLiteDatabase 的 query 方法之一,例如:-
sdb = db.getSQliteDB();
Cursor csr = sdb.query("SELECT * FROM " + tablename + " WHERE 0");
String[] columnNames = csr.getColumnNames();
csr.close();
如果您使用 RoomDatabase 的 rawQuery 方法,那么您必须知道列名并拥有一个具有与列名匹配的成员变量的对象。
【讨论】:
您好,感谢您的快速回答。 SupportSQLiteDatabase 中似乎缺少一些函数。例如,rawQuery 函数未列出,我已经在下面使用它来检索给定表的列名; 光标 c = db.rawQuery("SELECT * FROM "+tableName+" WHERE 0", null); columnNames = c.getColumnNames(); tableName 作为函数参数出现。如果没有按照您在第二个示例中的建议重新启动数据库,我找不到任何资源如何使用 Room 进行操作。我在 Dao 类上尝试了 RawQuery,但它似乎需要一个类型化的类来返回结果。您知道如何使用 Room 获取列名吗?在此链接中已经有问题,但没有答案。 ***.com/questions/53077570/…以上是关于如何从 Room 数据库中获取 SQLite 数据库实例引用?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Android Room 从数据库中获取一行? [复制]