Datenbankabfrage. Bin verzweifelt

Z

zblack

Gast
Ich habe eine Frage:
ich habe in meiner Datenbank folgende Spalten : name und ort.
Den Namen wähle ich in einem Fenster und übergebe den an die weitere Activity. Das gleiche mache ich mit dem ort auch.
name und ort kriege ich mit den Aufrufen:
Code:
 name = getIntent().getExtras().getString("name");
 ort  = getIntent().getExtras().getString("ort");
Jetzt möchte ich mit name und ort ein plz aus der Datenbank rauskriegen
Dafür habe ich in der Klasse, wo name und ort ermittelt wurden folgendes geschrieben:
Code:
dataBaseHelper = new DataBaseHelper(this);
dataBaseHelper.openDataBase();
dataBaseHelper.getPLZ(name, ort);
dataBaseHelper.close();
in der Database Klasse habe ich die Funktion :
Code:
public String getPLZ(String name, String ort){
        // TODO Auto-generated method stub
        String suche = "NAME = " + "'" + name + "'" + " AND ORT = " + "'" + ort + "'";
        Cursor c = myDatabase.query(USER_TABLE, columns,suche, null, null, null, null);
        if (c != null){
            c.moveToFirst();
            String plz = c.getString(c.getColumnIndex(PLZ));
            c.close();

            return plz;
        }
        return null;
    }
geschrieben. Doch statt den PLZ kriege ich immer wieder :
Code:
01-30 21:00:02.845: I/Zygote(1577): Zygote: pid 1577 has INTERNET permission, then set capability for CAP_NET_RAW(13)
01-30 21:00:03.315: I/ActivityThread(1577): queueIdle
01-30 21:00:03.315: V/ActivityThread(1577): Reporting idle of ActivityRecord{4a405698 token=android.os.BinderProxy@4a4050d0 {de.meinautohaus/de.meinautohaus.AppStartSeteActivity}} finished=false
01-30 21:00:03.315: W/ActivityNative(1577): send ACTIVITY_IDLE_TRANSACTION
01-30 21:05:41.285: I/ActivityThread(1577): queueIdle
01-30 21:05:41.285: V/ActivityThread(1577): Reporting idle of ActivityRecord{4a405698 token=android.os.BinderProxy@4a4050d0 {de.meinautohaus/de.meinautohaus.AppStartSeteActivity}} finished=false
01-30 21:05:41.285: W/ActivityNative(1577): send ACTIVITY_IDLE_TRANSACTION
01-30 21:06:17.955: I/ActivityThread(1577): queueIdle
01-30 21:06:17.955: V/ActivityThread(1577): Reporting idle of ActivityRecord{4a405698 token=android.os.BinderProxy@4a4050d0 {de.meinautohaus/de.meinautohaus.AppStartSeteActivity}} finished=false
01-30 21:06:17.955: W/ActivityNative(1577): send ACTIVITY_IDLE_TRANSACTION
01-30 21:06:47.245: I/ActivityThread(1716): queueIdle
01-30 21:06:47.245: V/ActivityThread(1716): Reporting idle of ActivityRecord{4a405660 token=android.os.BinderProxy@4a4050d0 {de.meinautohaus/de.meinautohaus.AppStartSeteActivity}} finished=false
01-30 21:06:47.245: W/ActivityNative(1716): send ACTIVITY_IDLE_TRANSACTION
01-30 21:06:48.845: I/ActivityThread(1716): queueIdle
01-30 21:06:48.845: V/ActivityThread(1716): Reporting idle of ActivityRecord{4a416260 token=android.os.BinderProxy@4a415cd8 {de.meinautohaus/de.meinautohaus.StartLogosActivity}} finished=false
01-30 21:06:48.845: W/ActivityNative(1716): send ACTIVITY_IDLE_TRANSACTION
01-30 21:06:49.515: E/Database(1716): sqlite3_open_v2("/data/data/de.meinautohaus/databases/autohausDB.db", &handle, 1, NULL) failed
01-30 21:06:49.675: I/ActivityThread(1716): queueIdle
01-30 21:06:49.685: V/ActivityThread(1716): Reporting idle of ActivityRecord{4a41d8e0 token=android.os.BinderProxy@4a41d350 {de.meinautohaus/de.meinautohaus.StandortWahlActivity}} finished=false
01-30 21:06:49.685: W/ActivityNative(1716): send ACTIVITY_IDLE_TRANSACTION
01-30 21:06:50.585: W/dalvikvm(1716): threadid=1: thread exiting with uncaught exception (group=0x400207d8)
01-30 21:06:50.595: E/AndroidRuntime(1716): FATAL EXCEPTION: main
01-30 21:06:50.595: E/AndroidRuntime(1716): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.meinautohaus/de.meinautohaus.MeinAutohausStartActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
01-30 21:06:50.595: E/AndroidRuntime(1716):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2685)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at android.app.ActivityThread.access$2300(ActivityThread.java:126)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2038)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at android.os.Looper.loop(Looper.java:123)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at android.app.ActivityThread.main(ActivityThread.java:4633)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at java.lang.reflect.Method.invokeNative(Native Method)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at java.lang.reflect.Method.invoke(Method.java:521)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at dalvik.system.NativeStart.main(Native Method)
01-30 21:06:50.595: E/AndroidRuntime(1716): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
01-30 21:06:50.595: E/AndroidRuntime(1716):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at de.meinautohaus.DataBaseHelper.getPLZ(DataBaseHelper.java:253)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at de.meinautohaus.MeinAutohausStartActivity.onCreate(MeinAutohausStartActivity.java:76)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-30 21:06:50.595: E/AndroidRuntime(1716):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2633)
01-30 21:06:50.595: E/AndroidRuntime(1716):     ... 11 more

der Fehler kommt aber nicht wenn ich den suche String z.b so schreibe :
String suche = "NAME = 'ich' AND ORT = 'Berlin'";
 
Dann lass dir "suche" doch einfach mal ausgeben und schau worin er sich vom problemlosen String unterscheidet ...

btw. warum nicht etwas kürzer? :
String suche = "NAME = ' " + name + " ' AND ORT = ' " + ort + " ' ";
 
stimmt, warum einfach wenns verdammt kompliziert geht ? :D
habe ich gelöst. Lag an der schreibweise. danke
 
Manchmal ist es übersichtlicher, wenn man mehr Code schreibt. In diesem Fall ist das SQL kurz, aber bei größeren SQL-Strings kann die Fehlersuche viel einfacher sein, wenn man nicht alles zusammenhängt. Wie schnell hat man da das ' gefolgt vom " überlesen -> '" bzw. vergessen hinzuschreiben. Aber wenn man ein + "'" + vergißt sieht man das schnell ;-)
 
  • Danke
Reaktionen: kleinerkathe
Stimmt natürlich auch :)
Hier im Forum siehts zumindest nicht sonderlich lesbar aus :p
 
Mal so am Rande:

Ich bin kein Freund davon, sql querys so zusammenzubauen, das gibt "herrliche" Abstütze, wenn man zum Beispiel nach Hochkommas sucht. Siehe auch SQL-Injection

Allerdings ist die Android Lösung SQLiteQueryBuilder.appenWhereEscapeString auch nicht gerade lesbar. :-/
 
  • Danke
Reaktionen: Tom299
Wieso nutzt du denn keine Prepared Statements? Damit würde sich die Sache mit Hochkomma und Injection erledigen.
 
Weil Android keine JDBC Schnittstelle für die SQLite DB an Bord hat.
 

Ähnliche Themen

E
Antworten
2
Aufrufe
777
ekaya999
E
M
  • michael1548
Antworten
1
Aufrufe
875
swa00
swa00
znieh99
  • znieh99
Antworten
1
Aufrufe
1.153
znieh99
znieh99
Zurück
Oben Unten