1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. Wicki12, 19.07.2012 #1
    Wicki12

    Wicki12 Threadstarter Android-Hilfe.de Mitglied

    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

    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

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

    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

    Zeig doch mal den Code mit der du die DB erstellst.
     
  6. Unicate, 20.07.2012 #6
    Unicate

    Unicate Android-Experte

    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

    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

    Siehe mein vorhergehender Post.
     
  9. Wicki12, 20.07.2012 #9
    Wicki12

    Wicki12 Threadstarter Android-Hilfe.de Mitglied

    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
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Integer-Wert übertragen auf zweite Activity Android App Entwicklung Freitag um 15:59 Uhr
[OFFEN] Komplette SQLite Datenbank verschlüsseln Android App Entwicklung 19.09.2017
[OFFEN] SQLITE insert gibt negative id zurück Android App Entwicklung 18.09.2017
[ERLEDIGT] Spinner feste double Werte zuordnen Android App Entwicklung 24.04.2017
[ERLEDIGT] In SQLite DB auf nächsten/vorherigen Datensatz zugreifen Android App Entwicklung 23.03.2017
SQLite asynchron benutzen Android App Entwicklung 26.02.2017
SQLite - Idee 'zentrale Datenbank' theoretisch möglich (und ratsam)? Android App Entwicklung 21.02.2017
[APPINVENTOR] Wie weise ich Werte aus Slidern zu ? Android App Entwicklung 07.02.2017
Du betrachtest das Thema "SQLite, Column-Wert mit Zeichenkette verknüpfen" im Forum "Android App Entwicklung",