Я пытаюсь запросить данные в библиотеке постоянства Android Room из существующей базы данных.Нет ошибки компиляции или ошибки во время выполнения.У курсора просто нет результата.
Запрос проверен и выглядит нормально (также в сгенерированном Java, как упомянуто в ответе 'Pinakin' База данных комнаты Android DAO, журнал отладки
База данных существует в папке /data/data/com.project/databases/. База данных имеет правильный размер, но нет других файлов, таких как упомянутые в ответе 'kosas' Комната AndroidФайл базы данных пуст
Подобный стиль копирования, как показано здесь https://android.jlelse.eu/room-persistence-library-with-pre-populated-database-5f17ef103d3d. Я изменил конструктор только на:
grammarDatabase = GrammarDatabase.getInstance(appContext);
, потому что моя база данных GrammarDatabase выглядит следующим образом:
@Database(
entities = {
Term.class
}, version = 1, exportSchema = false
)
public abstract class GrammarDatabase extends RoomDatabase {
private static final String DB_NAME = "database.db";
private static volatile GrammarDatabase instance;
public static synchronized GrammarDatabase getInstance(Context context) {
if (instance == null) {
instance = create(context);
}
return instance;
}
private static GrammarDatabase create(final Context context) {
return Room.databaseBuilder(context, GrammarDatabase.class, DB_NAME).fallbackToDestructiveMigration().allowMainThreadQueries().build();
}
public abstract TermDao getTermDao();
}
.fallbackToDestructiveMigration()
и .allowMainThreadQueries
только для целей тестирования.
Интерфейс 'TermDao_Impl' (сокращенная строка запроса):
@Override
public Cursor getSearchContent(String searchTerm, String languageCode) {
final String _sql = "SELECT T._id, T.term FROM term AS T INNER JOIN ... INNER JOIN language AS L INNER JOIN ... AND L.code= ? AND T.term LIKE ?";
final RoomSQLiteQuery _statement = RoomSQLiteQuery.acquire(_sql, 2);
int _argIndex = 1;
if (languageCode == null) {
_statement.bindNull(_argIndex);
} else {
_statement.bindString(_argIndex, languageCode);
}
_argIndex = 2;
if (searchTerm == null) {
_statement.bindNull(_argIndex);
} else {
_statement.bindString(_argIndex, searchTerm);
}
final Cursor _tmpResult = __db.query(_statement);
return _tmpResult;
}
ВызовMainActivity:
Сначала: database = DatabaseHelper.getInstance(context).getGrammarDatabase();
Затем:
Cursor c = database.getTermDao().getSearchContent("'"+searchTerm+"'", "'"+currentLanguageCode+"'");
if (c.moveToNext()) {
System.out.println("Found!");
System.out.println(c.getString(c.getColumnIndex("T.term")));
}
Попытка вызова с «» вокруг аргументов и без.
Таккурсор пуст, даже если запрос будет иметь результат (проверено в DB Browserдля SQLite)."Найденный!"Не печатается.