2012-06-10 21 views
5

Tôi cố gắng để mở một cơ sở dữ liệu SQLite có thể ghi với mã này ...java.lang.StringIndexOutOfBoundsException: index = 0 chiều dài = 0 trong cơ sở dữ liệu SQLite get

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

Tuy nhiên tôi nhận được lỗi sau trên db = DBHelper.getWritableDatabase(); dòng ...

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) 

Đây là mã của lớp DBHelper tôi ...

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 
    } 
} 

Ai đó có thể giúp tôi.

+3

Vui lòng cung cấp mã của lớp DBHelper –

+0

DataAdapterForServieClass nào open() throws SQLException { db = DBHelper.getWritableDatabase(); trả lại điều này; } đó là mã lớp dbhelper, và đó là nơi xảy ra lỗi –

+1

@KishorDgupta, chúng tôi cần mã của lớp 'DBHelper' của bạn, không phải mã mà bạn gọi nó. Mã của phương thức 'getWritableDatabase()' trong 'DBHelper' là gì? – wattostudios

Trả lời

2

Khi bạn gọi getWritableDatabase() cho lần đầu tiên, nó sẽ gọi phương pháp sau đây, theo Android Documentation ...

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

Bạn không có bất kỳ mã trong phương pháp onCreate() của bạn - bạn sẽ cần để làm một cái gì đó ở đây trước khi nó sẽ làm việc, như thế này ...

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

Nhìn vào checkDataBase() phương pháp trong link you posted nơi nó gọi openDatabase() - điều này làm điều tương tự, và là im mảnh mã portant mà bạn đang thiếu. Bạn cần phải tạo cơ sở dữ liệu trước khi bạn có thể làm bất cứ điều gì với nó.

Cũng đảm bảo rằng ở đâu đó trong mã của bạn, bạn đang tạo cá thể DBHelper của bạn, để nó gọi phương thức super(). Như thế này ...

DBHelper helper = new DatabaseHelper(context); 
+0

cảm ơn .i đang sử dụng mã khác nhau. một lớp để tạo và lớp để mở. bởi vì để duy trì một mô hình MVC, cảm ơn tôi đã nhận nó. Bạn giỏi quá –

Các vấn đề liên quan