| |||||||
Das Thema "Datenbankabfrage. Bin verzweifelt" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #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
| 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"); 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(); 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;
} 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 String suche = "NAME = 'ich' AND ORT = 'Berlin'"; |
| | |
| | #2 (permalink) | |
| Android Experte Registriert seit: 23.01.2010
Beiträge: 882
Abgegebene Danke: 74
Erhielt 149 Danke für 120 Beiträge
|
Dann lass dir "suche" doch einfach mal ausgeben und schau worin er sich vom problemlosen String unterscheidet ... btw. warum nicht etwas kürzer? : Zitat:
| |
| | |
| | #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
|
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 ;-)
|
| | |
| Folgender Benutzer bedankt sich bei Tom299 für diesen Beitrag: | kleinerkathe (31.01.2012) |
| | #6 (permalink) |
| Android Experte Registriert seit: 05.02.2010
Beiträge: 609
Abgegebene Danke: 75
Erhielt 136 Danke für 119 Beiträge
|
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. ![]() |
| | |
| Folgender Benutzer bedankt sich bei DieGoldeneMitte für diesen Beitrag: | Tom299 (01.02.2012) |
| | #7 (permalink) |
| Junior Mitglied |
Wieso nutzt du denn keine Prepared Statements? Damit würde sich die Sache mit Hochkomma und Injection erledigen.
|
| | |
| | #8 (permalink) |
| Android Experte Registriert seit: 05.02.2010
Beiträge: 609
Abgegebene Danke: 75
Erhielt 136 Danke für 119 Beiträge
|
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. ![]() |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| 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 |