Android SQLite数据库已损坏

Android SQLite数据库已损坏,第1张

概述此链接完全描述了我的问题: http://old.nabble.com/Android-database-corruption-td28044218.html#a28044218 现在大约有300人使用我的Android应用程序,每次使用此堆栈跟踪向服务器发送崩溃报告时: android.database.sqlite.SQLiteDatabaseCorruptException: databas 此链接完全描述了我的问题: http://old.nabble.com/Android-database-corruption-td28044218.html#a28044218

现在大约有300人使用我的AndroID应用程序,每次使用此堆栈跟踪向服务器发送崩溃报告时:

androID.database.sqlite.sqliteDatabaseCorruptException: database disk image is malformed    at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2596)    at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)    at androID.app.ActivityThread.access00(ActivityThread.java:126)    at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)    at androID.os.Handler.dispatchMessage(Handler.java:99)    at androID.os.Looper.loop(Looper.java:123)    at androID.app.ActivityThread.main(ActivityThread.java:4595)    at java.lang.reflect.Method.invokeNative(Native Method)    at java.lang.reflect.Method.invoke(Method.java:521)    at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)    at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:618)    at dalvik.system.NativeStart.main(Native Method) Caused by: androID.database.sqlite.sqliteDatabaseCorruptException: database disk image is malformed    at androID.database.sqlite.sqlitequery.native_fill_window(Native Method)    at androID.database.sqlite.sqlitequery.fillWindow(sqlitequery.java:75)    at androID.database.sqlite.sqliteCursor.fillWindow(sqliteCursor.java:295)    at androID.database.sqlite.sqliteCursor.getCount(sqliteCursor.java:276)    at androID.database.AbstractCursor.movetoposition(AbstractCursor.java:171)    at androID.database.AbstractCursor.movetoFirst(AbstractCursor.java:248)

结果是应用程序崩溃并且数据库中的所有数据都丢失了.

需要注意的一点是,每次我读取或写入数据库时​​,我都会得到一个新的sqliteDatabase,并在完成后立即将其关闭.我这样做是为了防止这种腐败错误.

我还尝试使用单个静态对象同步所有数据库读取和写入,这似乎没有帮助.

这可能只是一个sqlite错误吗?

我在这里找到了与内置电子邮件应用程序类似的错误:http://code.google.com/p/android/issues/detail?id=5610.

这是我的代码:

public class keyvaluetableAdapter extends BasetableAdapter {    private String tablename;    private String keyColumnname;    private String valueColumnname;    public keyvaluetableAdapter(Context context,String tablename,String keyColumnname,String valueColumnname) {        super(context);        this.tablename = tablename;        this.keyColumnname = keyColumnname;        this.valueColumnname = valueColumnname;    }    protected String getStringValue(int key) {        Cursor cursor = null;        sqliteDatabase db = null;        String value;        try {            db = dbOpenHelper.getReadableDatabase();            cursor = db.query(true,tablename,new String[] { valueColumnname },keyColumnname + "=" + key,null,null);            if ((cursor.getCount() == 0) || !cursor.movetoFirst()) {                value = null;            } else {                value = cursor.getString(0);            }        } finally {            if (cursor != null) cursor.close();            if (db != null) db.close();            dbOpenHelper.close();        }        return value;    }}public abstract class BasetableAdapter {    protected DbOpenHelper dbOpenHelper;    public BasetableAdapter(Context context) {        this.dbOpenHelper = new DbOpenHelper(context,DatabaseSettings.DATABASE_name,DatabaseSettings.DATABASE_VERSION);    }}
解决方法

“the DB holds session information so
it’s not very feasible to do a backup.
The data changes by the minute”

您应该尝试使用SharedPreferences:它存储键值对(在后台,它使用文件).
存储值:

SharedPreferences sp=MyActivity.getSharedPreferences("name",Context.MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit();editor.putString("key",value);editor.putBoolean("another",true);editor.commit();

检索数据:

sp.getString("key","Not found"); // "Not found" is the default value// if sp does not contain the specifIEd keysp.getBoolean("another",false); // false is the default value// if sp does not contain the specifIEd key

有关更详细的说明,请参见getSharedPreferences和SharedPreferences.

总结

以上是内存溢出为你收集整理的Android SQLite数据库已损坏全部内容,希望文章能够帮你解决Android SQLite数据库已损坏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1138750.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存