SQLite Exception - no such column

N

Nono

Neues Mitglied
1
Hallo zusammen,

ich habe eine Klasse zum Erstellen einer Datenbank. Hier ist der Code:

Code:
package com.example.meineApp;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class MySQLiteHelper extends SQLiteOpenHelper {

	private static final String DATABASE_NAME = "userSession.db";
	private static final int DATABASE_VERSION = 1;
	
	private static final String TABLE_CREATE_SESSION = ""
			+"CREATE TABLE session("
			+"id INTEGER PRIMARY KEY AUTOINCREMENT, "
			+"name TEXT,"
			+"passwort TEXT,"
			+"start DATETIME)";
	
	public MySQLiteHelper(Context context){
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}
	
	@Override
	public void onCreate(SQLiteDatabase database){
		database.execSQL(TABLE_CREATE_SESSION);
	}
	
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
		Log.w(MySQLiteHelper.class.getName(), 
				"Upgrading Database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data");
		db.execSQL("DROP TABLE IF EXISTS SCANITEM");
		onCreate(db);
	}

}

Wenn ich jetzt allerdings auf die Datenbank zugreifen möchte kommt eine SQLite Exception:

android.database.sqlite.SQLiteException: no such column: start (code 1):, while compiling: SELECT id, name, passwort, start FROM session

Anscheinend ist irgendwas mit dem "start" Feld. Aber wie ihr oben in der Klasse seht wird das Feld doch da erstellt. Also warum kommt die Exception?

Ich hoffe mir kann jemand helfen.
Viele Grüße
 
DATETIME wird von SQLite nicht unterstützt.

HTML:
SQLite does not have a storage class set aside for storing dates and/or times. 
Instead, the built-in Date And Time Functions of SQLite are capable of
storing dates and times as TEXT, REAL, or INTEGER values:
TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS"). 
REAL as Julian day numbers, the number of days since noon in Greenwich
       on November 24, 4714 B.C. according to the proleptic Gregorian
       calendar. 
INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00
       UTC.  

Applications can chose to store dates and times in any of these formats and
freely convert between formats using the built-in date and time functions.
https://www.sqlite.org/datatype3.html
 
markus.tullius schrieb:
DATETIME wird von SQLite nicht unterstützt.

Ok also ich habe jetzt das DATETIME durch TEXT ersetzt, es kommt aber immernoch der selbe Fehler.

Der ursprüngliche Beitrag von 22:16 Uhr wurde um 22:23 Uhr ergänzt:

Oder liegts daran, dass das gar nicht geht mit den Datenbanken über den Emulator?
 
Natürlich gehen Datenbanken mit dem Emulator. Öffne doch mal die Datenbankdatei in nem SQLite Manager o.ä. und schau dir an, was überhaupt passiert ist und ob alle Spalten vorhanden sind.

Darüber hinaus wäre es interessant gewesen, wenn du den Code deines Selects auch gezeigt hättest (oder hab ich dne übersehen?)!

Noch eine Anmerkung: wenn du doch eh alles im select auswählst, dann kannst du auch gleich "SELECT * FROM blabla" machen, anstatt alles aneinander zu reihen. Aber das ist nur nebensächlich ein Hinweis, der mit dem Problem wohl nichts zu tun hat.
 
Hast du die alte Datenbank auf dem Emulator gelöscht?
(In den Einstellungen unter dem Menüpunkt App einfach die Daten Löschen, oder optional die Datenbankversion hoch zählen)
 
reneph schrieb:
Öffne doch mal die Datenbankdatei in nem SQLite Manager o.ä. und schau dir an, was überhaupt passiert ist und ob alle Spalten vorhanden sind.

Wo genau finde ich denn die Datenbank Datei?

markus.tullius schrieb:
Hast du die alte Datenbank auf dem Emulator gelöscht?
(In den Einstellungen unter dem Menüpunkt App einfach die Daten Löschen, oder optional die Datenbankversion hoch zählen)

Nein habe ich nicht. Wie komme ich denn zu den Einstellungen? Direkt im Emulator oder irgendwo in Eclipse?

Der ursprüngliche Beitrag von 23:02 Uhr wurde um 23:12 Uhr ergänzt:

Und hier noch die Methode in der der Select Befehl ausgeführt wird:

Code:
private String[] allColumns = {"id", "name", "passwort", "start"};
protected boolean sessionExists(){
	Cursor cursor = database.query("session", allColumns, null, null, null, null, null);
	cursor.moveToFirst();
		
	if(cursor.getCount() == 0){
		return false;
	}
		
	cursor.close();
		
	return true;
}
 
Im Emulator: Einstellung>Apps>Heruntergeladen> "Name der App"

und dort den Button "Daten löschen" drücken.

Über ADB wird zwar eine neue App hoch geladen, aber die Datenbank wird dabei nicht gelöscht.
 
Nono schrieb:
Wo genau finde ich denn die Datenbank Datei?

Die liegen i.d.R. unter /data/data/deinpaketname/databases/

Da kannst bspw. per DDMS oder ADB zugreifen.
 
Oder du deinstallierst die App kurz und installierst sie neu ;)
Geht meist schneller^^

lg.
 
Ja aber warum soll er die Datenbank löschen? Ich hatte ihn zuvor empfohlen mal in die Datenbank rein zu schauen, um zu prüfen, dass die Tabellen etc. korrekt erstellt wurden, da bringt eine gelöschte Datenbank zumeist recht wenig.
 
Ganz einfach.

Wie soll er eine neu Tabelle (Mit richtigen Datentypen) erzeugen, wenn die alte Tabelle noch in der Datenbank steht.

Entweder löscht er die komplette Datenbank, oder löscht die alte Tabelle auf der Datenbank per sql Befehl.

Deswegen gibt es auch die Versionsnummer für Datenbank. Für den Fall das der Entwickler die Datenbankstruktur neu geschrieben hat, und einfach die Datenbank austauschen will. Niemand will auf allen Handys, wo die App ausgerollt ist, die alte Datenbanken löschen. ;)
 
  • Danke
Reaktionen: reneph
Na selbstverständlich :o hab nichts gesagt :D
 
Alles klar hab die Daten gelöscht und neu gestartet. Funktioniert jetzt. Danke euch :)
 

Ähnliche Themen

R
Antworten
6
Aufrufe
1.016
swa00
swa00
5
Antworten
5
Aufrufe
1.208
jogimuc
J
Justice
Antworten
4
Aufrufe
1.678
Justice
Justice
Zurück
Oben Unten