У меня довольно большой БД и заполнять ROOM с нуля - плохая идея, решил заполнить из уже созданной БД, с точно такими же колонками, как и в той, что прописал для ROOM. Прочитал документацию:
https://developer.android.com/training/data-storag...
Но результат нулевой - БД не отображается, такое ощущение, что ее просто нет.
Entity
@Entity(tableName = "Stages")
public class Stages {
@PrimaryKey(autoGenerate = true)
public int ID;
public String DESC;
@Override
public String toString() {
return DESC;
}
}
Dao
@Dao
public interface StagesDAO {
@Insert
void insert (Stages stages);
@Query("DELETE from stages WHERE id IN (:idList)")
int deleteByIdList(List<Long> idList);
@Query("SELECT * FROM stages WHERE id = :ids")
Stages getById(long ids);
}
Database
@Database(entities = {Stages.class}, version = 2, exportSchema = false)
public abstract class StagesDB extends RoomDatabase {
private static StagesDB instance = null;
private static final String DB_NAME = "stages.db";
public static StagesDB getInstance(Application application){
if (instance == null){
instance = Room.databaseBuilder(
application,
StagesDB.class,
DB_NAME
)
.createFromAsset("databases/Stages.db")
.allowMainThreadQueries()
.build();
}
return instance;
}
public abstract StagesDAO stagesDAO();
}
MainActivity
Log.d("reaf", String.valueOf(stagesDB.stagesDAO().getById(1)));
В DataBase Inspector БД не определеляется (при создании с нуля из ROOM было все ок). При этом через DB Browser подключение к БД проходит успешно и содержимое доступно.
При попытке чтения записи (MainActivity) ловлю ошибку со ссылку на строку чтения (что логично) а так же на строку
__db.assertNotSuspendingTransaction();
в
StagesDAO_Impl.java:
@Override
public Stages getById(final long ids) {
final String _sql = "SELECT * FROM stages WHERE id = ?";
final RoomSQLiteQuery _statement = RoomSQLiteQuery.acquire(_sql, 1);
int _argIndex = 1;
_statement.bindLong(_argIndex, ids);
__db.assertNotSuspendingTransaction();
final Cursor _cursor = DBUtil.query(__db, _statement, false, null);
try {
final int _cursorIndexOfID = CursorUtil.getColumnIndexOrThrow(_cursor, "ID");
final int _cursorIndexOfDESC = CursorUtil.getColumnIndexOrThrow(_cursor, "DESC");
final Stages _result;
if(_cursor.moveToFirst()) {
_result = new Stages();
_result.ID = _cursor.getInt(_cursorIndexOfID);
if (_cursor.isNull(_cursorIndexOfDESC)) {
_result.DESC = null;
} else {
_result.DESC = _cursor.getString(_cursorIndexOfDESC);
}
} else {
_result = null;
}
return _result;
} finally {
_cursor.close();
_statement.release();
}
}
Помогите, пожалуйста, разобраться и в чем я ошибся?