java.lang.StringIndexOutOfBoundsException:在= sqlite数据库中索引= 0 length = 0

时间:2012-06-10 06:08:05

标签: java android database sqlite indexoutofboundsexception

我正在尝试使用此代码打开可写的SQLite数据库...

public DataAdapterForServieClass open() throws SQLException {
    db = DBHelper.getWritableDatabase();
    return this;
}

但是我在db = DBHelper.getWritableDatabase();行上收到以下错误...

06-10 11:58:13.995: ERROR/AndroidRuntime(548): FATAL EXCEPTION: main
06-10 11:58:13.995: ERROR/AndroidRuntime(548): java.lang.StringIndexOutOfBoundsException: index=0 length=0
06-10 11:58:13.995: ERROR/AndroidRuntime(548):     at android.app.ContextImpl.validateFilePath(ContextImpl.java:1518)
06-10 11:58:13.995: ERROR/AndroidRuntime(548):     at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:725)
06-10 11:58:13.995: ERROR/AndroidRuntime(548):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
06-10 11:58:13.995: ERROR/AndroidRuntime(548):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:149)

这是我的DBHelper类的代码......

static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion 
            + " to "
            + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS titles");
        onCreate(db);
    }

    public void onCreate(SQLiteDatabase arg0) {
        // TODO Auto-generated method stub
    }
}   

有人可以帮助我。

1 个答案:

答案 0 :(得分:2)

当您第一次致电getWritableDatabase()时,它会调用以下方法,根据Android Documentation ...

onCreate(SQLiteDatabase)
onUpgrade(SQLiteDatabase, int, int)
onOpen(SQLiteDatabase)

您的onCreate()方法中没有任何代码 - 您需要在此处执行某些操作,例如此...

public void onCreate(SQLiteDatabase database) {
    database.openOrCreateDatabase("/come/example/mydatabase",null);
}

查看link you posted中调用checkDataBase()的{​​{1}}方法 - 这会做同样的事情,并且是您丢失的重要代码段。您需要先创建数据库,然后才能对其执行任何操作。

还要确保代码中的某个位置正在创建DBHelper实例,以便它调用openDatabase()方法。像这样......

super()