SQLiteDiskIOException:磁盘I / O错误在创建数据库时 [英] SQLiteDiskIOException: disk I/O error when creating database

查看:215
本文介绍了SQLiteDiskIOException:磁盘I / O错误在创建数据库时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Android中使用这种code创建数据库:

I am creating a database in android using this code:

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()。

This app is on the market and I have received a few error reports. I have not been able to duplicate it on any of my devices, and the error is relatively rare. I realize the DB_PATH should probably be retrieved from the device, however that should not be effecting the call to getReadableDatabase().

任何想法?

推荐答案

我有同样的问题与HTC Desire HD的,和Android 2.1系统的Galaxy S

I had the same problem with HTC Desire HD, and Galaxy S on Android 2.1

使用以下为DB_PATH似乎来解决这个问题:

Using the following as for DB_PATH seems to fix the problem:

Environment.getDataDirectory() + "/data/YOUR_PACKAGE/databases/";

详细信息可以在这里 http://stackoverflow.com/a/4828540

这篇关于SQLiteDiskIOException:磁盘I / O错误在创建数据库时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆