微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – SQLiteDiskIOException:创建数据库时出现磁盘I / O错误

我正在使用以下代码android中创建数据库

public class PackageDBHelper extends sqliteOpenHelper{

//The Android's default system path of your application database.
private static String DB_PATH = "/data/data/com.myapp/databases/";

private static String DB_NAME = "my_db.db";

public sqliteDatabase db; 

private final Context myContext;

public PackageDBHelper(Context context) {

    super(context, DB_NAME, null, 1);
    this.myContext = context;
}   
public void createDataBase() throws IOException{

    boolean dbExist = checkDataBase();

    if(dbExist){
        //do nothing - database already exist
    }else{

        //By calling this method and empty database will be created into the default system path
           //of your application so we are gonna be able to overwrite that database with our database.
        this.getReadableDatabase();  //error occurs here

        try {

            copyDataBase();

        } catch (IOException e) {

            throw new Error("Error copying database");

        }
    }

}

堆栈跟踪:

android.database.sqlite.sqlitediskIOException: disk I/O error
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1668)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1684)
at android.app.ActivityThread.access$1500(ActivityThread.java:124)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:948)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3717)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.sqlitediskIOException: disk I/O error
at android.database.sqlite.sqliteDatabase.dbopen(Native Method)
at android.database.sqlite.sqliteDatabase.<init>(sqliteDatabase.java:1849)
at android.database.sqlite.sqliteDatabase.openDatabase(sqliteDatabase.java:820)
at android.database.sqlite.sqliteOpenHelper.getReadableDatabase(sqliteOpenHelper.java:197)
at com.myapp.util.PackageDBHelper.createDataBase(PackageDBHelper.java:51)

这个应用程序在市场上,我收到了一些错误报告.我无法在任何设备上复制它,错误相对较少.我意识到应该从设备中检索DB_PATH,但这不应该影响对getReadableDatabase()的调用.

有任何想法吗?

解决方法:

我在HTC Desire HD和Android 2.1上的galaxy S上遇到了同样的问题

使用以下DB_PATH似乎解决了问题:

Environment.getDataDirectory() + “/data/YOUR_PACKAGE/databases/”;

更多细节在这里https://stackoverflow.com/a/4828540

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐