SQLite, Column-Wert mit Zeichenkette verknüpfen

W

Wicki12

Ambitioniertes Mitglied
0
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
 
Ich muss mal fragen was deine Anweisung tun soll.

||? wozu das denn?
 
|| 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
 
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)
 
Zeig doch mal den Code mit der du die DB erstellst.
 
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.
 
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
 
Siehe mein vorhergehender Post.
 
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
 

Ähnliche Themen

R
  • RalfKahl
Antworten
10
Aufrufe
301
RalfKahl
R
R
Antworten
6
Aufrufe
1.015
swa00
swa00
5
Antworten
22
Aufrufe
1.421
590239
5
Zurück
Oben Unten