Problem bei Datenbankabfrage: Fehlermeldung:column '_id' does not exist

  • 7 Antworten
  • Letztes Antwortdatum
M

Mits

Neues Mitglied
0
Hallo Leute!

Ich versuche jetzt schon seit 2 Tagen diesen Fehler wegzubekommen, aber ich bekomm es einfach nicht hin. Ich hab schon alles möglich Ausprobiert, aber es geht einfach nicht.

Hat wer eine Idee?

Hier mal kurz meine Konfig:

Code:
db.execSQL("CREATE TABLE " + Umsatz.TABLE_NAME + " ("
                + Umsatz.KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + Umsatz.KEY_UMSATZ_AG + " UNSIGNED INTEGER, "
                + Umsatz.KEY_NAME + " TEXT, "
                + Umsatz.KEY_ORT + " TEXT, "
                + Umsatz.KEY_BESTLLNR+ " TEXT, "
                + ");");
Code:
public Cursor getUmsatzByAGid2(int AgId) {
SQLiteDatabase db = getReadableDatabase();
Cursor result = db.rawQuery(
 "SELECT * FROM " + Umsatz.TABLE_NAME + " WHERE " + 
Umsatz.KEY_UMSATZ_AG + " = " + AgId +";",null);
result.moveToFirst();
return result;
 }
Befühlen möchte ich hiermit einen ListAdapter.

Code:
setListAdapter(new CustomerUmsatzDetailsListAdapter(
this, database.getUmsatzByAGid2(customer_id)))
Bei der Abfrage bekomme ich aber immer dann die Fehlermeldung:

java.lang.RuntimeException: Unable to start activity ComponentInfo{.crm.customer.CustomerDetailsActivity}:
java.lang.IllegalArgumentException: column '_id' does not exist

Bin für jeden Tip dankbar!

lg
Jörg
 
wird ein bissl schwierig weil man nicht weiß wie du deine Columns betitelt hast.

Ich würde das ganze mal durch debuggen sprich um zu schauen was bei result raus kommt, da sieht man ja was er alles für spalten kennt
 
Hi,
es könnte auch sein, dass sich die Database Version nichtmehr stimmt wenn du mehr Rows hinzugefügt hast, deshalb mal die Nummer wechseln damit es geupdatet wird.

mfG
 
Hallo Leute!

Danke für Eure Hilfe.

@Madlip:

Columes hab ich wie so betitelst:

Code:
public class Umsatz {

    public static String TABLE_NAME = "Umsatz";
    public static String KEY_ID = "_ID";
    public static String KEY_UMSATZ_AG = "Umsatz_ag";
    public static String KEY_NAME = "Name";
    public static String KEY_ORT = "Ort";
    public static String KEY_BESTLLNR = "BestellNr";
}
mit dem Debug bin ich auch nicht wirklich weitergekommen!

@Kollon: Hab die Version geändert, hat leider nichts geholfen.

Was könnte ich den noch versuchen?

Vielen dank im Voraus!

lg
Jörg
 
Kann es sein, dass es bereits eine Tabelle mit dem Namen gibt (und die die Spalte _id nicht hat)?
 
Hallo GoldeneMitte!

Ich hab die App komplett gelöscht mit allen Daten und wieder neu gemacht,
trotzdem der Fehler.

Hast Du vielleicht noch ne Idee?

Vielen dank im Voraus!

lg
Jörg
 
mir bereiten ein paar sachen bauchschmerzen ... zu nächst bin ich mir nicht sicher ob das mit dem UNSIGNED INTEGER so korrekt ist, das nächste wäre das du die tabellen namen alle groß geschrieben hast, vielleicht wenn man dieses auch mal austauschen würde zu kleinen buchstaben (du kannst ja mit "_" trennen) und bei den id Tabellennamen, würde ich das "_" vorweg einmal weg nehmen.

Und ich glaub du hast ein ";" zu viel in der Create Table

Code:
db.execSQL("CREATE TABLE " + Umsatz.TABLE_NAME + " ("
                + Umsatz.KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + Umsatz.KEY_UMSATZ_AG + " UNSIGNED INTEGER, "
                + Umsatz.KEY_NAME + " TEXT, "
                + Umsatz.KEY_ORT + " TEXT, "
                + Umsatz.KEY_BESTLLNR+ " TEXT, "
                + ")[COLOR=magenta];[/COLOR]");

das wären jetzt die sachen wo ich was ändern würde ...

PS: Prüf bitte mal ob die Tabelle wirklich existiert, vielleicht auch mal in den File-Manager schauen (DDMS? sorry bin mir gerade nicht sicher weil ich verdammt doch mal keine Entwicklungsumgebung hier hab :...( )
 
Hallo!

Also die Tabellen sind alle da, der einzige Unterschied ist wirklich das bei allen
anderen Tabellen die _id Spalte klein geschrieben ist und nur bei der Umsatz Tabelle ist die Bezeichnung groß _ID geschrieben.
In der Tabelle stehen Werte, also fortlaufende Nummern

Der Wert in der Spalte wird ja beim erstellen von der Datebank selber vergeben.

Die Tabellen wurden alle in der gleichen Art definiert.
Und dort funktioniert es auch, der einzige Unterschied ist, das beim befühlen der anderen Tabellen zB. der Kundentabelle die Kundennummer die ID ist und von mir beim Import in das _id Feld geschrieben wird!

Die Tabelle Umsatz wird durch einen Import aus einem CSV File befühlt.
Anbei mal der Code

Code:
StringBuilder stringBuilder = new StringBuilder();
        stringBuilder
                .append("INSERT INTO ")
                .append(Umsatz.TABLE_NAME)
                .append(" (Umsatz_ag, Name,Ort,BestellNr,MaterialNr,Bezeichnung,Menge,ME,Nettopreis,Pro,Belegdatum,Angelegt,Status)")
                .append(" VALUES (")
                .append(idag).append(", ")
                .append("'" + name + "'").append(", ")
                .append("'" + ort + "'").append(", ")
                .append("'" + bestellnr + "'").append(",")
                .append("'" + materialnr + "'").append(", ")
                .append("'" + bezeichnung + "'").append(", ")
                .append(menge).append(", ")
                .append("'" + me + "'")
                .append(", ").append(price).append(", ")
                .append("'" + pro + "'").append(", ")
                .append("'" + datum + "'")
                .append(", ")
                .append("'" + Angelegt + "'").append(", ")
                .append("'" + status + "'").append(");");

        batchWriteDb.execSQL(stringBuilder.toString());
Muss ich beim Import doch was anders mit Angeben?

UNSIGNED INTEGER habe ich jetzt eigentlich bei all meinen Tabellen Verwendet und hat auch immer funktioniert.

Bin für jeden Tip dankbar!

lg
Jörg
 

Ähnliche Themen

A
Antworten
5
Aufrufe
707
swa00
swa00
Zurück
Oben Unten