【问题标题】:Data not written to sqlite db if power is lost shortly after write如果写入后不久断电,数据不会写入 sqlite db
【发布时间】:2012-10-05 09:22:33
【问题描述】:

我的应用程序将一些数据插入其 SQLite 数据库,应用程序确认插入成功。 但是,如果不久之后断电,移动设备完全重启后数据将不可见。

似乎正在进行一些缓存 - 我如何“刷新”缓冲区/缓存?

注意:sqlite db 位于主闪存上,而不是 sdcard 上。

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    你好,在某处,

    如果要保证发生数据库写入,则应使用事务。

    ie:这是一个您可以构建的简单示例。

    DatabaseHelper readDB = new DatabaseHelper(Context);
    SQLiteDatabase db = readDB.getWritableDatabase();
    
    String lastConnID = "1";
    String DATABASE_TABLE = "TestDB";
    String KEY_ROWID = "pkey";
    
    db.beginTransaction();
    db.update(DATABASE_TABLE, values, KEY_ROWID + "="
                        + "'" + lastConnID + "'", null);
    db.setTransactionSuccessful();
    db.endTransaction();
    

    可以在here 找到一个示例 DatabaseHelperClass。

    当您调用 setTransactionSuccessful 时,契约已完成,项目应提交到数据库。您应该在调用它之后立即结束事务,因为即使在设置事务成功和结束事务之间发生错误,它仍然会提交到数据库。

    希望对您有所帮助! 干杯。

    【讨论】:

    • 我试过了,还是写不全;移动设备重新启动后,我关闭了数据库并使用“SQLite 数据库浏览器”对其进行了检查——它向我显示了数据。但是,如果我使用 Android 的“sqlite3”检查表,则数据丢失。似乎“SQLite 数据库浏览器”更宽容一些——但如果 Android 的 sqlite3 不认为数据是被写入的,这对我没有帮助。
    • 我怀疑写入数据(缓存刷新)的唯一方法是执行另一次写入,可能是写入不需要的数据,但我还不确定。跨度>
    猜你喜欢
    • 2012-07-06
    • 2017-03-22
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多