Я создал базу данных через Room и дал путь разработчикам на C ++ через JNI. Все данные вставляются со стороны C ++ с помощью sqlpp
Затем я выполняю SQL-запрос и не получаю свежие данные. Если я убью приложение и начну снова, SQL-запрос вернет все данные.
@Provides
@Singleton
LocalDatabase provideLocalDatabase(@DatabaseInfo String dbName, Context context) {
return Room.databaseBuilder(context, LocalDatabase.class, dbName)
.setJournalMode(RoomDatabase.JournalMode.WRITE_AHEAD_LOGGING)
.build();
}
MessageDao
@Dao
public abstract class MessageDao implements BaseDao<Message> {
@Query("SELECT * FROM messages")
public abstract Flowable<Message> getMessage();
}
Отправка пути базы данных в C ++
String uiDbPath = MyApp.applicationContext.getDatabasePath(AppConstants.DB_NAME).getAbsolutePath();
send_db_path_to_c_plus_plus(uiDbPath);
Мы используем режим JournalMode.WRITE_AHEAD_LOGGING, после вставки данных в базу данных я проверяю базу данных, чтобы убедиться, что все данные выходы. В результате я вижу все данные, но запрос на выбор не возвращается. Как я могу решить проблему, пожалуйста, помогите? Заранее спасибо.
РЕДАКТИРОВАТЬ 1 C ++ части
int64_t insert(manager::db::connection & conn, int64_t conv_id, int64_t author_id, const std::string & data)
{
auto conn_guard = manager::db::make_connection_guard(conn);
{
LOG_TRACE("db::insert(in_msg) - BEGIN conv_id={0} author_id={1}", conv_id, author_id);
const auto tab_in_msg = manager::db::tables::InMsgs{};
auto tx = start_transaction(conn_guard.native());
conn_guard.native()(insert_into(tab_in_msg).set(tab_in_msg.conversationId = conv_id, tab_in_msg.authorId = author_id, tab_in_msg.data = data));
int64_t rowid = conn_guard.native().last_insert_id();
tx.commit();
LOG_TRACE("db::insert(in_msg) - END rowid={0}", rowid);
return rowid;
}
}
Задача ещё не решена.
Других решений пока нет …