2012-06-10 28 views
5

Próbuję otworzyć do zapisu bazy danych SQLite z tym kodem ...java.lang.StringIndexOutOfBoundsException: index = 0 Długość = 0 w bazie danych SQLite get

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

jednak otrzymuję następujący błąd na db = DBHelper.getWritableDatabase(); linia ...

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) 

jest to kod mojego DBHelper klasy ...

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

Czy ktoś mógłby mi pomóc?

+3

Proszę podać kod klasy DBHelper –

+0

DataAdapterForServieClass publiczne open() throws SQLException { db = DBHelper.getWritableDatabase(); zwróć to; } } to był kod klasy dbhelper, i to tam wystąpił błąd –

+1

@KishorDgupta, potrzebujemy kodu twojej klasy 'DBHelper', a nie kodu, w którym to nazwiesz. Jaki jest kod metody 'getWritableDatabase()' w 'DBHelper'? – wattostudios

Odpowiedz

2

Po wywołaniu getWritableDatabase() po raz pierwszy, to zadzwoń do jednej z następujących metod, zgodnie z Android Documentation ...

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

Nie ma żadnego kodu w metodzie onCreate() - trzeba zrobić coś tu kiedyś będzie pracować, taki jak ten ...

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

spojrzeć na metody w link you posted gdzie wywołuje openDatabase()checkDataBase() - to nie to samo, i jest im ważny fragment kodu, którego brakuje. Musisz utworzyć bazę danych, zanim będziesz mógł coś z nią zrobić.

Upewnij się również, że gdzieś w kodzie tworzona jest instancja DBHelper, dlatego wywołuje ona metodę super(). Tak ...

DBHelper helper = new DatabaseHelper(context); 
+0

dzięki .i używało kodu inaczej. jedna klasa do utworzenia i klasa do otwarcia. ponieważ do utrzymania modelu MVC, dzięki mam to. Świetnie –