为什么“房间选择”查询无法通过C ++工作?

时间:2018-12-26 05:08:22

标签: android c++ select android-room

我通过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;
   }
}

0 个答案:

没有答案