2016-12-05 3 views
1

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)

+0

testen Sie auf einem Emulator? –

+0

kein onreal Gerät Nexus 6p – Redman

+0

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 –

Antwort

2

beheben Ihre SELECT Abfrage auf den ersten

String query = "SELECT * FROM " + TABLE_HIGHLIGHTS+ " WHERE " + KEY_BOOKNAME + " = '" + bookname + "'"; 

Dann Uninstall alte App und laufen wieder.

+1

Arbeitete komplett, danke bro – Redman

1
String query="select * from "+TABLE_HIGHLIGHTS+" where "+KEY_BOOKNAME+"='"+bookname+"'"; 
+1

Danke es funktioniert, aber, intellij antwortete zuerst, so akzeptierte seine Antwort, jeder Weg +1 Danke für die Hilfe :) – Redman

+0

ya no proble.Thanks für +1 –

2

Der Fehler beim Abrufen der Spaltenwerte.

Der Spaltenindex beginnt mit der Null im SQL-Cursor.

java.lang.IllegalStateException: Couldn't read row 0, col 4 from CursorWindow.

So ist die Bedeutung der obigen Zeile 4 Spalte in dem Cursor-Objekt nicht verfügbar ist

Ihr Versuch mit 0 bis 3. Ich denke, dass es gelöst werden soll.

+0

habe nicht versucht, diese Antwort, weil über die Antwort funktionierte gut, so dass ich dabei bleibe jeder weise danke für die Hilfe +1 :) – Redman

Verwandte Themen