我正在嘗試從現有的 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
有沒有其他方法可以獲取資料庫,甚至這可能嗎?任何幫助將不勝感激。
uj5u.com熱心網友回復:
有沒有其他方法可以獲取資料庫,甚至這可能嗎?任何幫助將不勝感激。
有了房間,您可以通過 RoomDatabase getOpenHelper 通過 getWritableDatabase 方法(或 getReadableDatabase,但實際上在所有情況下都會獲得可寫資料庫)獲得SupportSQLiteDatabase。
所以 :-
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 的查詢方法之一,例如:-
sdb = db.getSQliteDB();
Cursor csr = sdb.query("SELECT * FROM " tablename " WHERE 0");
String[] columnNames = csr.getColumnNames();
}
csr.close();
如果您使用 RoomDatabase 的rawQuery方法,那么您必須知道列名并擁有一個物件,該物件具有與列名匹配的成員變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325076.html
標籤:安卓 数据库 sqlite android-room
