Dilip
Dilip

Reputation: 2311

android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 1802)

I have written some code which is used to delete database folder. It delete database but also throw error. Please suggest me how to solve this problem.

Code for delete database

public void deleteDB() {
        try {
            File db_path = new File(
                    "/data/data/pacakge_name/databases/mydatabase_db.db");
            db_path.delete();
            System.out
                    .println("Database deleted successfully================================");
        } catch (Exception e) {
            // TODO: handle exception
            Log.e("Error==", e.toString());
        }
    }
Cursor cursor = handler.getCategoryData("1");
                        if (cursor.moveToFirst()) {
                            System.out
                                    .println("database has data................................");
                        } else {
                            System.out
                                    .println("database has no data.............................");
                            LiveTVCategoryParser category_parser = new LiveTVCategoryParser();
                            category_parser.category_parser(Splash.this, "1",
                                    "live_root");
                        }

Error:

android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 1802)
E/AndroidRuntime(  613):    at android.database.sqlite.SQLiteConnection.nativeExecuteForCursorWindow(Native Method)
E/AndroidRuntime(  613):    at android.database.sqlite.SQLiteConnection.executeForCursorWindow(SQLiteConnection.java:838)
E/AndroidRuntime(  613):    at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:836)
E/AndroidRuntime(  613):    at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62)
E/AndroidRuntime(  613):    at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:143)
E/AndroidRuntime(  613):    at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
E/AndroidRuntime(  613):    at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:196)
E/AndroidRuntime(  613):    at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:236)
E/AndroidRuntime(  613):    at com.zengamedia.ui.Splash$1.run(Splash.java:51)
E/AndroidRuntime(  613):    at java.util.Timer$TimerImpl.run(Timer.java:284)

Upvotes: 3

Views: 17411

Answers (3)

KrisZhang
KrisZhang

Reputation: 1

call this function when database‘s CRUD

public synchronized void checkDBIsOpen() {
        try {
            mydb = dbHelper.getWritableDatabase();
        } catch (Exception e) {
            e.printStackTrace();
            NewsLog.error(TAG, "check database is open or not,excetpion:" + Utility2_1.getErrorInfo(e));
        }
    }

Upvotes: 0

Michael
Michael

Reputation: 1496

The error code 1802 is SQLITE_IOERR_FSTAT. I'd rather assume something is wrong on the disk level, try to delete the database and check the disk medium.

Upvotes: 0

Sam
Sam

Reputation: 86948

You should close your Cursors and database before deleting the SQLite file.

Upvotes: 7

Related Questions