SQLiteDiskIOException: disk I / O error while creating database

I am creating a database in android using this code:

public class PackageDBHelper extends SQLiteOpenHelper{ //The Android 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"); } } } 

Stacktrace:

 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) 

This application is on the market and I have received several bug reports. I could not duplicate it on any of my devices, and the error is relatively rare. I understand that DB_PATH should probably be retrieved from the device, however this should not result in a call to getReadableDatabase ().

Any ideas?

+4
source share
2 answers

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

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

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

More information is available here fooobar.com/questions/650904 / ...

+5
source

try changing

 public PackageDBHelper(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; } 

to

 public PackageDBHelper(Context context) { super(context, "my_db", null, 1);//without the extension .db this.myContext = context; } 
0
source

Source: https://habr.com/ru/post/1402691/


All Articles