Ich erstellte SQL-Datenbank in meiner App und versuchen, markierten Text zu speichern, Speichern funktioniert alles gut, sogar alle Lichter retreving funktioniert gut, aber wenn ich für Highlights basierend auf Bookname bin ich bin Fehler bekommenSqlite Datenbankabfrage basierend auf einem String-Namen
hier ist, was ich
bis jetzt versucht, diese Basis meine oncreate von sQLite-Daten ist
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_HIGHLIGHTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," +KEY_BOOKNAME +" TEXT," + KEY_HIGHLIGHT+" TEXT," + KEY_TEXTSIZE + " INTEGER,"
+ KEY_PAGENO + " INTEGER" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
Das ist in Ordnung arbeiten
public List<HighlightSave> getAllHighlights(){
List<HighlightSave> saveAllHighlights=new ArrayList<HighlightSave>();
String selectQuery="SELECT * FROM "+TABLE_HIGHLIGHTS;
SQLiteDatabase db=this.getWritableDatabase();
Cursor cursor=db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
do{
HighlightSave hs=new HighlightSave();
hs.setBookName(cursor.getString(1));
hs.setHighlightedText(cursor.getString(2));
hs.setTextSize(Integer.parseInt(cursor.getString(3)));
hs.setPageno(Integer.parseInt(cursor.getString(4)));
saveAllHighlights.add(hs);
}while(cursor.moveToNext());
}
cursor.close();
db.close();
return saveAllHighlights;
}
Problem ist, wenn ich versuche, wie ich diese Störung erhalten
12-05 11:03:48.025: E/AndroidRuntime(8811): FATAL EXCEPTION: main
12-05 11:03:48.025: E/AndroidRuntime(8811): Process: com.wowio.ebookreader, PID: 8811
12-05 11:03:48.025: E/AndroidRuntime(8811): java.lang.IllegalStateException: Couldn't read row 0, col 4 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.database.CursorWindow.nativeGetString(Native Method)
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.database.CursorWindow.getString(CursorWindow.java:438)
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
12-05 11:03:48.025: E/AndroidRuntime(8811): at com.eminosoft.epubreader.HighlightDatabase.getBookHighlights(HighlightDatabase.java:160)
12-05 11:03:48.025: E/AndroidRuntime(8811): at com.eminosoft.epubreader.HighlightFragment.onActivityCreated(HighlightFragment.java:66)
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1508)
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:958)
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:446)
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.os.Handler.handleCallback(Handler.java:739)
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.os.Handler.dispatchMessage(Handler.java:95)
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.os.Looper.loop(Looper.java:148)
12-05 11:03:48.025: E/AndroidRuntime(8811): at android.app.ActivityThread.main(ActivityThread.java:5422)
12-05 11:03:48.025: E/AndroidRuntime(8811): at java.lang.reflect.Method.invoke(Native Method)
12-05 11:03:48.025: E/AndroidRuntime(8811): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
12-05 11:03:48.025: E/AndroidRuntime(8811): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
unter
public List<HighlightSave> getBookHighlights(String bookname){
SQLiteDatabase db= this.getReadableDatabase();
List<HighlightSave> AllHighlightsOfBook= new ArrayList<HighlightSave>();
Cursor cursor = db.query(TABLE_HIGHLIGHTS, new String[] {KEY_BOOKNAME,KEY_HIGHLIGHT,KEY_TEXTSIZE,KEY_PAGENO}, KEY_BOOKNAME + "=?", new String[] { bookname }, null, null, null, null);
if(cursor.moveToFirst()){
do{
HighlightSave hs=new HighlightSave();
hs.setBookName(cursor.getString(1));
hs.setHighlightedText(cursor.getString(2));
hs.setTextSize(Integer.parseInt(cursor.getString(3)));
hs.setPageno(Integer.parseInt(cursor.getString(4)));
AllHighlightsOfBook.add(hs);
}while(cursor.moveToNext());
}
cursor.close();
db.close();
return AllHighlightsOfBook;
}
mit einem Booknamen abzufragen
so dachte ich ein Problem mit Cursor es auf diese Weise innerhalb getBookHighlights so initialisiert (
)String query = "Select * from "+TABLE_HIGHLIGHTS+ " Where " +KEY_BOOKNAME + " = " + bookname ;
Cursor cursor= db.rawQuery(query,null);
dann ich erhalte diesen Fehler
12-05 11:20:06.514: E/AndroidRuntime(12305): FATAL EXCEPTION: main
12-05 11:20:06.514: E/AndroidRuntime(12305): Process: com.wowio.ebookreader, PID: 12305
12-05 11:20:06.514: E/AndroidRuntime(12305): android.database.sqlite.SQLiteException: near "Raven": syntax error (code 1): , while compiling: Select * from highlights Where book_Name = The Raven
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255)
12-05 11:20:06.514: E/AndroidRuntime(12305): at com.eminosoft.epubreader.HighlightDatabase.getBookHighlights(HighlightDatabase.java:146)
12-05 11:20:06.514: E/AndroidRuntime(12305): at com.eminosoft.epubreader.HighlightFragment.onActivityCreated(HighlightFragment.java:66)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1508)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:958)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:446)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.os.Handler.handleCallback(Handler.java:739)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.os.Handler.dispatchMessage(Handler.java:95)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.os.Looper.loop(Looper.java:148)
12-05 11:20:06.514: E/AndroidRuntime(12305): at android.app.ActivityThread.main(ActivityThread.java:5422)
12-05 11:20:06.514: E/AndroidRuntime(12305): at java.lang.reflect.Method.invoke(Native Method)
12-05 11:20:06.514: E/AndroidRuntime(12305): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
12-05 11:20:06.514: E/AndroidRuntime(12305): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Was mache ich falsch? (I deinstalliert App vor jedem Lauf so wird es kein Problem mit früheren Datenbank sein)
testen Sie auf einem Emulator? –
kein onreal Gerät Nexus 6p – Redman
können Sie auf Emulator einmal testen? Führen Sie Ihre App und öffnen Sie sqlite db von adm und überprüfen Sie, ob die Tabelle Daten –