SLQ db fehler bei get writable database

  • Hallo ich bin gerade dabei meine erste Android App zu programmieren.
    Wir hatten in der Schule noch keine Db aber ich dachte mir, wenn ich den Code aus Android Apps Entwicklung für Dummies einfach übernehme, dann wird das schon funktionieren. Jetzt habe ich aber einen Fehler und weiß nicht woran das liegen könnte. Ich habe schon alles Versucht und im Internet gesucht aber nichts gefunden.
    Hier ist erst mal die LogCat Fehler ausgabe:



    02-02 19:40:42.036: E/Database(656): Failure 1 (near "tableberechner": syntax error) on 0x11a4e0 when preparing 'create tableberechner(_id integer primary key autoincrementPreis/Litertext not null, Litertext not null, Preistext not null, KMtext not null, Datumtext not null);'.
    02-02 19:40:42.056: D/AndroidRuntime(656): Shutting down VM
    02-02 19:40:42.056: W/dalvikvm(656): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
    02-02 19:40:42.056: E/AndroidRuntime(656): Uncaught handler: thread main exiting due to uncaught exception
    02-02 19:40:42.066: E/AndroidRuntime(656): java.lang.RuntimeException: Unable to resume activity {com.marcodeubel.berechner/com.marcodeubel.berechner.BerechnerActivity}: android.database.sqlite.SQLiteException: near "tableberechner": syntax error: create tableberechner(_id integer primary key autoincrementPreis/Litertext not null, Litertext not null, Preistext not null, KMtext not null, Datumtext not null);
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2950)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2965)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2516)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.os.Handler.dispatchMessage(Handler.java:99)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.os.Looper.loop(Looper.java:123)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread.main(ActivityThread.java:4363)
    02-02 19:40:42.066: E/AndroidRuntime(656): at java.lang.reflect.Method.invokeNative(Native Method)
    02-02 19:40:42.066: E/AndroidRuntime(656): at java.lang.reflect.Method.invoke(Method.java:521)
    02-02 19:40:42.066: E/AndroidRuntime(656): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    02-02 19:40:42.066: E/AndroidRuntime(656): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    02-02 19:40:42.066: E/AndroidRuntime(656): at dalvik.system.NativeStart.main(Native Method)
    02-02 19:40:42.066: E/AndroidRuntime(656): Caused by: android.database.sqlite.SQLiteException: near "tableberechner": syntax error: create tableberechner(_id integer primary key autoincrementPreis/Litertext not null, Litertext not null, Preistext not null, KMtext not null, Datumtext not null);
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1610)
    02-02 19:40:42.066: E/AndroidRuntime(656): at com.marcodeubel.berechner.BerechnerDbAdapter$DatabaseHelper.onCreate(BerechnerDbAdapter.java:98)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106)
    02-02 19:40:42.066: E/AndroidRuntime(656): at com.marcodeubel.berechner.BerechnerDbAdapter.open(BerechnerDbAdapter.java:43)
    02-02 19:40:42.066: E/AndroidRuntime(656): at com.marcodeubel.berechner.BerechnerActivity.onResume(BerechnerActivity.java:63)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.Activity.performResume(Activity.java:3763)
    02-02 19:40:42.066: E/AndroidRuntime(656): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2937)
    02-02 19:40:42.066: E/AndroidRuntime(656): ... 12 more
    02-02 19:40:42.086: I/dalvikvm(656): threadid=7: reacting to signal 3
    02-02 19:40:42.086: E/dalvikvm(656): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
    02-02 19:40:43.946: I/Process(656): Sending signal. PID: 656 SIG: 9
    Ich werde gleich den Quellcode posten. Ich hoffe ihr findet den Fehler ich bin am verzweifeln.
    Vielen Dank schon mal
    LG Marco

  • Hier ist noch der Quelltext:
    Die Klasse BrechnerActivity:


    BerechnerDbAdapter:

  • Hi marco.deubel,


    ich vermute mal, dein Fehler liegt hier:


    Zitat

    02-02 19:40:42.036: E/Database(656): Failure 1 (near "tableberechner": syntax error) on 0x11a4e0 when preparing 'create tableberechner(_id integer primary key autoincrementPreis/Litertext not null, Litertext not null, Preistext not null, KMtext not null, Datumtext not null);'.


    im Code wäre das hier:


    wenn du dir den String ausgeben läßt wirst du es sehen.


    kann es sein das die Methode open() von BerechnerDbAdapter nicht aufgerufen wird. (finde Sie jedenfalls nicht)


    mfg Titus

  • Die Stelle bei autoincrement hab ich auch gefunden. ;)


    Einen weiteren Fehler solltest du noch korrigieren in der Zeile


    Java
    public static final String KEY_PREISLITER = "Preis/Liter";


    Weil dieser String in der Datenbank-Erzeugung benutzt wird, ist der "/" ein Problem. Schreib lieber "PreisProLiter". ;)

  • achja - noch eins: oben im Editorfenster gibt's einen kleinen Button für Java-Code-Formatierung (die Tasse) - damit wird Code vernünftig formatiert dargestellt. Bei so langen Codeausschnitten können wir das dann besser lesen. :*

  • Hey vielen Dank ich habe die Fehler verbessert und ich kann die App jetzt ohne Fehler öffnen. Nun habe ich aber eine List View mit der dazugehörigen Activity implementiert. Diese soll eigentlich die Datenbank auslesen und darstellen aber da kommt wieder ein Fehler. Ich bin wirklich am verzweifeln und hoffe es ist wieder so ein simpler Fehler wie bei "Preis/Liter".
    Hier der Quellcode für die Klasse BerechnerListActivity(ist im Manifest natürlich hinzugefügt):


    Diese rufe ich über einen einfachen Intent auf. Dann gibt es aber einen Laufzeitfehler mit folgenden Ausgaben:


    Ich habe es versucht nachdem ich Daten in die Db eingetragen habe und auch ohne Daten aber es geht nicht.
    Hier noch mal der Quelltext für den Adapter der Db:


    Vielen Dank für die Hilfe
    Lg Marco

  • Ah kann der Fehler daher kommen, das wenn ich die BerchnerListActivity aus der BerechnerActivity über einen normalen Intent aufrufe, die BerchnerActivity pausiert wird. Wenn das geschieht versucht diese über onSaveInstanceState den aktuellen Status zu speichern. Dies geht aber nicht, da warum auch immer kein Status zum speichern vorliegt.
    Hier noch mal die Methode:

    Java
    @Override	protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState);outState.putLong(BerechnerDbAdapter.KEY_ROWID, mRowId); }

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!