我通过Room创建数据库,并通过JNI将路径提供给C ++开发人员。所有数据都通过使用sqlpp
从C ++端插入,然后我正在执行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模式,将数据插入数据库后,我正在检查数据库以确保所有数据均已退出。结果,我看到了所有数据,但是select查询没有返回。我该如何解决该问题,请帮忙?预先感谢。
编辑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;
}
}