1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

SQLite, Column-Wert mit Zeichenkette verknüpfen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Wicki12, 19.07.2012.

  1. Wicki12, 19.07.2012 #1
    Wicki12

    Wicki12 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    57
    Erhaltene Danke:
    0
    Registriert seit:
    04.04.2012
    Hallo,

    zu meiner SQLite-Datenbank habe ich einen "SimpleCursorAdapter". Nun soll in der ListView ein Column-Wert mit einer konstanten Zeichenkette verknüpft erscheinen. Ich hatte versucht, die SQL-Anweisung passend zu modifizieren und sie dann mit
    Code:
    [URL="http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery%28java.lang.String,%20java.lang.String[]%29"]rawQuery[/URL]([URL="http://developer.android.com/reference/java/lang/String.html"]String[/URL] sql, [URL="http://developer.android.com/reference/java/lang/String.html"]String[][/URL] selectionArgs)
    abzuschicken. Dabei erhielt ich folgende Fehlermeldung:
    column 'place' does not exist
    Die Select-Anweisung sieht so aus:
    select _id,phone,surname,place||', A-'||postcode,address,email from table
    Die gleiche Select-Anweisung funktioniert jedoch mit dem Tool sqlite3 auf der Datenbank. Ich habe es versucht mit Android 2.2 und Android 4.0.3, ohne Erfolg. Kann mir jemand helfen ?

    Gruß Wicki
     
  2. Unicate, 19.07.2012 #2
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Ich muss mal fragen was deine Anweisung tun soll.

    ||? wozu das denn?
     
  3. Wicki12, 20.07.2012 #3
    Wicki12

    Wicki12 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    57
    Erhaltene Danke:
    0
    Registriert seit:
    04.04.2012
    || ist ein Operator zur Verkettung von Ausdrücken, die beiden Spaltenwerte "place" und "postcode" sollen mit der dazwischenliegenden Konstanten zusammengefasst werden.
    Bsp.: Platz, A-123456
     
  4. Maddi, 20.07.2012 #4
    Maddi

    Maddi Android-Hilfe.de Mitglied

    Beiträge:
    82
    Erhaltene Danke:
    10
    Registriert seit:
    18.07.2010
    Um das Problem einzugrenzen solltest du einmal „select place from table“ ausführen.
    Solltest du die Fehlermeldung
    column 'place' does not exist nicht bekommen liegt der Fehler in dem,place||', A-'||postcode Teil.
    Merke: Was ein Management-Studio ausführen kann ist nicht zwingend das was andere Programme auf der DB ausführen können.

    (z.b. Im MS-SQL Manager kann man "select abc from xyz where abc like 'Mon'" ohne Probleme ausführen. Führt man das ganze z.B. über einen Webservice aus, kommt ein leeres resultset zurück. Da ist es zwingend nötig
    "select abc from xyz where abc like '%Mon'"
    oder "select abc from xyz where abc like 'Mon%'"oder "select abc from xyz where abc like '%Mon%'" zu Schreiben)
     
  5. derjens, 20.07.2012 #5
    derjens

    derjens Android-Hilfe.de Mitglied

    Beiträge:
    80
    Erhaltene Danke:
    5
    Registriert seit:
    19.07.2012
    Zeig doch mal den Code mit der du die DB erstellst.
     
  6. Unicate, 20.07.2012 #6
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Es ist ziemlich warscheinlich das der Fehler beim || liegt. Ich würde bei einer solchen Abfrage auch das wort AS und definitiv Anführungszeichen verwenden.

    Sowas in der Richtung:
    Code:
    SELECT `bla`||`, A`||`postcode` AS whatever... FROM
    
    Meine Erfahrung sagt, mehr ` ist immer besser.

    Alternative:
    Setz doch den Strin zusammen NACHDEM du die Daten aus der DB geholt hast.
     
  7. Wicki12, 20.07.2012 #7
    Wicki12

    Wicki12 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    57
    Erhaltene Danke:
    0
    Registriert seit:
    04.04.2012
    Hier der Code:
    Code:
        public Cursor fetchAllInfos(String s) {
    if (false) {
          //Fehler: "column place does not exist"
          String sql = "select "+KEY_ROWID+","+KEY_TITLE+",phone,"+
              "surname,"+ "place || ', A-' || postcode"+",address,email,website " +
              "from "+DATABASE_TABLE+" where "+s;
          Log.i("**** SQL:",sql);
          return myDataBase.rawQuery(sql,null);
    } else {
          return myDataBase.query(DATABASE_TABLE, new String[] {KEY_ROWID,KEY_TITLE,
                KEY_PHONE,KEY_SURNAME, KEY_PLACE,KEY_ADDRESS,KEY_EMAIL,KEY_WEBSITE,
                KEY_POSTCODE},
                s, null, null, null, null );
    }
        }
    
    
    Der else-Zweig funktioniert.
    Die Konstanten im else-Zweig stehen für die Spaltennamen im if-Zweig.
    Wenn ich im if-Zweig || ', A-' || durch ein , ersetze funktioniert es.
    Der Parameter s ist die WHERE-Klausel.

    Gruß Wicki
     
  8. Unicate, 20.07.2012 #8
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Siehe mein vorhergehender Post.
     
  9. Wicki12, 20.07.2012 #9
    Wicki12

    Wicki12 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    57
    Erhaltene Danke:
    0
    Registriert seit:
    04.04.2012
    Dank an alle, die einen Beitrag geleistet haben.
    Meine aktuelle Lösung:
    Ich verwende nicht mehr "myDataBase.rawQuery" sondern "myDataBase.query" und zusätzlich:
    Code:
    //notes ist mein SimpleCursorAdapter
    notes.setViewBinder(new MyViewBinder());
             .
             .
        private class MyViewBinder implements SimpleCursorAdapter.ViewBinder {
          public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
             //Column-Werte ggf. modifizieren
             .
          }
        }
    
    Gruß Wicki
     

Diese Seite empfehlen