Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Datenbankabfrage. Bin verzweifelt

Das Thema "Datenbankabfrage. Bin verzweifelt" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 30.01.2012, 21:24   #1 (permalink)
Android-Hilfe.de Mitglied

Registriert seit: 31.10.2011
Beiträge: 85
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
Standard Datenbankabfrage. Bin verzweifelt

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'";
zblack ist offline   Mit Zitat antworten
Alt 31.01.2012, 13:57   #2 (permalink)
Android Experte
 
Benutzerbild von kleinerkathe

Registriert seit: 23.01.2010
Beiträge: 882
Abgegebene Danke: 74
Erhielt 149 Danke für 120 Beiträge
Standard AW: Datenbankabfrage. Bin verzweifelt

Dann lass dir "suche" doch einfach mal ausgeben und schau worin er sich vom problemlosen String unterscheidet ...

btw. warum nicht etwas kürzer? :
Zitat:
String suche = "NAME = ' " + name + " ' AND ORT = ' " + ort + " ' ";
kleinerkathe ist offline   Mit Zitat antworten
Alt 31.01.2012, 15:06   #3 (permalink)
Android-Hilfe.de Mitglied

Registriert seit: 31.10.2011
Beiträge: 85
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
Standard AW: Datenbankabfrage. Bin verzweifelt

stimmt, warum einfach wenns verdammt kompliziert geht ?
habe ich gelöst. Lag an der schreibweise. danke
zblack ist offline   Mit Zitat antworten
Alt 31.01.2012, 15:21   #4 (permalink)
Fortgeschrittenes Mitglied

Modell: HTC Sensation

Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
Standard AW: Datenbankabfrage. Bin verzweifelt

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 ;-)
Tom299 ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei Tom299 für diesen Beitrag:
kleinerkathe (31.01.2012)
Alt 31.01.2012, 21:17   #5 (permalink)
Android Experte
 
Benutzerbild von kleinerkathe

Registriert seit: 23.01.2010
Beiträge: 882
Abgegebene Danke: 74
Erhielt 149 Danke für 120 Beiträge
Standard AW: Datenbankabfrage. Bin verzweifelt

Stimmt natürlich auch
Hier im Forum siehts zumindest nicht sonderlich lesbar aus :P
kleinerkathe ist offline   Mit Zitat antworten
Alt 01.02.2012, 09:41   #6 (permalink)
Android Experte
 
Benutzerbild von DieGoldeneMitte

Registriert seit: 05.02.2010
Beiträge: 609
Abgegebene Danke: 75
Erhielt 136 Danke für 119 Beiträge
Standard AW: Datenbankabfrage. Bin verzweifelt

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. :-/
__________________
Kein Support via PN/eMail. Bitte das Forum benutzen - dort haben alle etwas davon.
Bei Entwicklerfragen zu abstürzenden Apps bitte immer die Ausgabe von LogCat posten.
Tipp: Zum "Danke" sagen gibt es einen Button.
DieGoldeneMitte ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei DieGoldeneMitte für diesen Beitrag:
Tom299 (01.02.2012)
Alt 02.02.2012, 00:57   #7 (permalink)
Junior Mitglied

Modell: Samsung Galaxy S2, Samsung Galaxy Tab 10.1N, HTC Desire

Registriert seit: 07.06.2011
Beiträge: 44
Abgegebene Danke: 8
Erhielt 12 Danke für 7 Beiträge
jan.b eine Nachricht über ICQ schicken
Standard AW: Datenbankabfrage. Bin verzweifelt

Wieso nutzt du denn keine Prepared Statements? Damit würde sich die Sache mit Hochkomma und Injection erledigen.
jan.b ist offline   Mit Zitat antworten
Alt 02.02.2012, 09:04   #8 (permalink)
Android Experte
 
Benutzerbild von DieGoldeneMitte

Registriert seit: 05.02.2010
Beiträge: 609
Abgegebene Danke: 75
Erhielt 136 Danke für 119 Beiträge
Standard AW: Datenbankabfrage. Bin verzweifelt

Weil Android keine JDBC Schnittstelle für die SQLite DB an Bord hat.
__________________
Kein Support via PN/eMail. Bitte das Forum benutzen - dort haben alle etwas davon.
Bei Entwicklerfragen zu abstürzenden Apps bitte immer die Ausgabe von LogCat posten.
Tipp: Zum "Danke" sagen gibt es einen Button.
DieGoldeneMitte ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
bitte helft mir, bin verzweifelt Mexican Allgemeine Kaufberatung 7 26.12.2011 17:33
Hilfe, bin verzweifelt ;-( sunny63 Samsung Galaxy S Plus (I9001) Forum 8 14.12.2011 09:42
Kamera spinnt, bin verzweifelt AnimeNörd Samsung Galaxy S SCL (I9003) Forum 1 23.11.2011 19:50
Bin etwas verzweifelt giuli Nexus S Forum 9 10.10.2011 11:24
Anwendung als Standart definieren. Verzweifelt bin Micha0807 Motorola Milestone Forum 6 10.03.2011 11:35




Du liest gerade: "Datenbankabfrage. Bin verzweifelt" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.