Datenbank column existiert angeblich nicht

Micka

Micka

Fortgeschrittenes Mitglied
1
Hey,

ich bin gerade dabei ein Haushaltsbuch zu schreiben.

In meiner StartseiteActivity will ich dazu zu Testzwecken einen Eintrag in eine Datenbank machen. Dies hab ich mir gedacht kann ich in der onCreate Methode machen. Wenn es einmal geklappt hat kommt der Source Code für den manuellen Eintrag dort wieder raus.



Hier mein Quellcode:
Code:
package micka.haushaltsbuch;

import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;

public class Startseiteactivity extends Activity {
   [B] final static String MY_DB_NAME = "FinanzenDB";
    final static String MY_DB_TABLE = "eintraege";[/B]
    final static String tag="ensacom"; 
    
    /** Called when the activity is first created. */
    @Override
    [B]public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SQLiteDatabase myDB = null;
        try {
            myDB = this.openOrCreateDatabase(MY_DB_NAME, MODE_PRIVATE, null);
            myDB.execSQL("CREATE TABLE IF NOT EXISTS tabellen"
                    + " (_id integer primary key autoincrement,"
                    + " tabellenname text not null)"
                    + ";");
            myDB.execSQL("INSERT INTO tabellen (tabellenname) "
                    +"VALUES('eintraege');");
        } finally {
             if (myDB != null)
                  myDB.close();
        }
        onCreateDBAndDBTabled();
        setContentView(R.layout.startseitelayout);
    }[/B]

    /** Erzeugt Menüeintrag beenden **/
    public static final int beenden_ID = Menu.FIRST;
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        menu.add(0, beenden_ID, Menu.NONE, "beenden");
        return super.onCreateOptionsMenu(menu);
    }
    public boolean onOptionsItemSelected(MenuItem item)
    {
        switch(item.getItemId())
        {
        case beenden_ID: 
            finish();

        default:
            return super.onOptionsItemSelected(item);
        }
    }
    //ButtonFunktionen
    public void onClickEintragHinzufuegen(final View sfNormal) 
    {
        final Intent i = new Intent(this, EintragHinzufuegenActivity.class);
        startActivity(i);
    }
    public void onClickEintraegeAnzeigen(final View sfNormal) 
    {
        final Intent i = new Intent(this, TabellenAnzeigenActivity.class);
        startActivity(i);
    }
    /** Datenbank und Tabellen erstellen wenn noch nicht vorhanden */
    private void onCreateDBAndDBTabled()
    {
        SQLiteDatabase myDB = null;
        try {
            myDB = this.openOrCreateDatabase(MY_DB_NAME, MODE_PRIVATE, null);
            myDB.execSQL("CREATE TABLE IF NOT EXISTS " + MY_DB_TABLE
                    + " (_id integer primary key autoincrement,"
                    + " day integer(2), month integer(2),"
                    + " year integer(4), wofuer text not null,"
                    + " betrag real)"
                    +";");
        } finally {
             if (myDB != null)
                  myDB.close();
        }
    }
}
In meiner onCreate Methode öffne oder erstelle ich meine Datenbank tabellen mit den Attributen _id und tabellenname.
Direkt danach will ich einen Eintrag machen. Dabei kommen Exceptions

hier mein LogCat:
01-04 11:57:15.234: E/Database(188): Failure 1 (table tabellen has no column named tabellenname) on 0x122128 when preparing 'INSERT INTO tabellen (tabellenname) VALUES('eintraege');'.
01-04 11:57:15.254: D/AndroidRuntime(188): Shutting down VM
01-04 11:57:15.274: W/dalvikvm(188): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
01-04 11:57:15.274: E/AndroidRuntime(188): Uncaught handler: thread main exiting due to uncaught exception
01-04 11:57:15.324: E/AndroidRuntime(188): java.lang.RuntimeException: Unable to start activity ComponentInfo{micka.haushaltsbuch/micka.haushaltsbuch.Startseiteactivity}: android.database.sqlite.SQLiteException: table tabellen has no column named tabellenname: INSERT INTO tabellen (tabellenname) VALUES('eintraege');
01-04 11:57:15.324: E/AndroidRuntime(188): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
01-04 11:57:15.324: E/AndroidRuntime(188): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
01-04 11:57:15.324: E/AndroidRuntime(188): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
01-04 11:57:15.324: E/AndroidRuntime(188): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
01-04 11:57:15.324: E/AndroidRuntime(188): at android.os.Handler.dispatchMessage(Handler.java:99)
01-04 11:57:15.324: E/AndroidRuntime(188): at android.os.Looper.loop(Looper.java:123)
01-04 11:57:15.324: E/AndroidRuntime(188): at android.app.ActivityThread.main(ActivityThread.java:4363)
01-04 11:57:15.324: E/AndroidRuntime(188): at java.lang.reflect.Method.invokeNative(Native Method)
01-04 11:57:15.324: E/AndroidRuntime(188): at java.lang.reflect.Method.invoke(Method.java:521)
01-04 11:57:15.324: E/AndroidRuntime(188): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-04 11:57:15.324: E/AndroidRuntime(188): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-04 11:57:15.324: E/AndroidRuntime(188): at dalvik.system.NativeStart.main(Native Method)
01-04 11:57:15.324: E/AndroidRuntime(188): Caused by: android.database.sqlite.SQLiteException: table tabellen has no column named tabellenname: INSERT INTO tabellen (tabellenname) VALUES('eintraege');
01-04 11:57:15.324: E/AndroidRuntime(188): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
01-04 11:57:15.324: E/AndroidRuntime(188): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1610)
01-04 11:57:15.324: E/AndroidRuntime(188): at micka.haushaltsbuch.Startseiteactivity.onCreate(Startseiteactivity.java:28)
01-04 11:57:15.324: E/AndroidRuntime(188): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-04 11:57:15.324: E/AndroidRuntime(188): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
01-04 11:57:15.324: E/AndroidRuntime(188): ... 11 more
 
hmm die tabelle wird nur genau einmal erzeugt. wenn du später dann eine spalte im code hinzufügst, musst du die app komplett neu installieren, damit das möglich ist ( oder eben die tabelle über ein alter table statement erweitern)

ist nur ne vermutung, dass das dein problem ist.
 
vielleicht ist es interessant die Struktur vom Rest der App zu kennen. Es gibt eine Activity zum hinzufügen von Einträgen die funktioniert auch soweit. Die einträge werden dann in eine beliebige anzugebene Tabelle der Datenbank eingetragen.
zum testen habe ich die tabelle "eintraege" der Datenbank "FinanzenDB" gewählt.

Wenn ich nun die Einträge anzeigen will will ich das der User erstmal eine Auswahl der existierenden Tabellen gezeigt kriegt und sich dann für eine Tabelle entscheidet. Die Methode zum anlegen neuer Tabellen habe ich noch nicht implementiert.

Deshalb möchte ich testweise diese eine tabelle "eintraege" in die Datenbank eintragen. Später wird es eine eigene Activity geben bzw in einem headerLayout oberhalb der angezeigten Tabellen soll es die Möglichkeit geben eine neue Tabelle anzulegen wenn keine der existierenden gewünscht ist.
 
@ Swordi

Die Tabelle tabellen soll nur diese eine Spalte haben und auch nie erweitert werden. Sinn ist es nur hier die Strings MY_DB_TABLE auszulagern damit man später in einer anderen Activity auf alle existierenden tabellen zugreifen kann.
 
hast versucht mal die app zu deinstallieren und nochmal zu installieren?

dann musst du ins detail rein debuggen. sonst wirds wohl schwer.

btw: pms helfen nicht dabei schneller eine antwort zu bekommen :)
 
  • Danke
Reaktionen: Micka
wird die App nicht jedesmal von Eclipse neu installiert?
 
cool danke....nun ist der Fehler weg.
 
die app wird von eclipse nur upgedated nicht komplett neu installiert.

danke button befindet sich rechts unten
 
  • Danke
Reaktionen: Micka
n schönen "no such column" fehler hab ich momentan auch...
Scheint aber eine Eigenheit der Contacts db zu sein..

folgender Code

Code:
ContentResolver resolver = context.getContentResolver();
Uri uri = ContactsContract.StatusUpdates.CONTENT_URI;
String[] columns = new String[]{ ContactsContract.StatusUpdates.STATUS };
String where = ContactsContract.StatusUpdates.IM_HANDLE+"=?";
Cursor lastStatus = resolver.query(uri, columns, where, new String[]{clickedContact}, null);
führt zu dieser Meldung..
01-04 20:59:31.092: E/AndroidRuntime(10619): Caused by: android.database.sqlite.SQLiteException: no such column: im_handle: , while compiling: SELECT status FROM view_data data LEFT OUTER JOIN status_updates ON (status_updates.status_update_data_id=data._id) WHERE ((im_handle=?))

Ändere ich die Projektion, läufts :sleep:

Code:
String[] columns = new String[]{ ContactsContract.StatusUpdates.PRESENCE };
Dabei sollte doch alleine die Uri bestimmen, welche Tabelle abgefragt wird..
Laut ContactsContract.StatusUpdates | Android Developers müsste das doch funktionieren. :s

Muss wohl eine "Optimierung" sein..
Mit
Code:
String[] columns = new String[]{ ContactsContract.StatusUpdates.PRESENCE, ContactsContract.StatusUpdates.STATUS };
gehts natürlich. :D
 
Zuletzt bearbeitet:

Ähnliche Themen

S
Antworten
33
Aufrufe
2.655
Sempervivum
S
SaniMatthias
Antworten
19
Aufrufe
940
swa00
swa00
Zurück
Oben Unten