1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

SQLiteOpenHelper.onCreate() führt keine Befehle aus?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von lord_fritte, 27.03.2012.

  1. lord_fritte, 27.03.2012 #1
    lord_fritte

    lord_fritte Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    312
    Erhaltene Danke:
    7
    Registriert seit:
    15.11.2009
    Phone:
    Samsung Galaxy S4
    Hallo, ich habe einen Datenbank-Helfer von der SQLiteOpenHelper abgeleitet und möchte in der onCreate() Funktion die Datenbank erstellen lassen.
    Dazu führe ich in der onCreate(), mittels, rawQuery(), "create table" statements aus.
    Diese statements scheint er aber ganz zu ignorieren, die Datenbankdatei wird zwar angelegt, aber es befinden sich keine Tabellen darin.

    Ich habe in den Kopf der onCreate einen breakpoint gesetzt und bin mit dem Debugger durchgelaufen, die function wird aufgerufen und alle rawQuery aufrufe werden durchlaufen.

    PHP:
    public final class Database extends SQLiteOpenHelper {
        public 
    Database(Context context) {
            
    super(context"Database.db"null100);
        }

        @
    Override
        
    public void onCreate(SQLiteDatabase db) {
            
    db.rawQuery("create table if not exists Konten( " +
                    
    "idKonto integer primary key autoincrement, " +
                    
    "name varchar(15) not null, " +
                    
    "kontoTyp int not null default 0, " +
                    
    "startWert float not null default 0, " 
                    
    "created long not null default current_timestamp, " +
                    
    "changed long not null default current_timestamp, " +
                    
    "isDeleted int not null default 0, " +
                    
    "constraint u_konto_name unique(name));"null);
    //.... usw.

     
  2. mradlmaier, 28.03.2012 #2
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    Ich begegne in einem anderen Zusammenhang ein ähnliches Problem, da werdern INSERT und UPDATE Queries mittels db.rawQuery() nicht ausgeführt. Werde jetzt alternative Query Methoden ausprobieren. Bisher hab ich rawQuery("sqlString") bevorzugt, weil ich das SQL - Statement zwecks SQL debuggen einfach in SQLite Expert kopieren kann und exekutieren um zu sehen, ob das SQL Statement korrekt. Das geht bei den Methoden leider nicht. Möglicherweise gibt es da Einschränkungen bez. der Statements die man mit rawQuery exekutiere kann. In der Doku steht leider nix dazu drin.
     
  3. mradlmaier, 28.03.2012 #3
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    Alternativ gibt es die QuickConnect DataAccess Library quickconnectfamily. Die ist unter der BSD Lizenz und stellt eine super einfache API für SQLite Datenbankanbindung zur Verfügung.
    Mit einer Einschränkung: die Methoden benötigen als zusätzlichen Parameter eine Activity (Ich ermute um den Lebenszyklus des DataAccessObjects and die Activity zu binden, und so DB-Leaks zu unterbinden). Damit ist man bei Homescreen Widgets vermutlich out-of-luck...
     
  4. mradlmaier, 28.03.2012 #4
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    Hab in meinem Falle db.rawQuery() durch db.insert() ersetzt. Danach hat es funktioniert. Guck mal in deiner, welche Methode deinen db.rawQuery() in ersetzen könnte. Tippe mal auf db.execSQL() oder so. Schade dass es mit db.rawQuery() Probleme gibt, fand das immer praktisch, dass man da genau weiss, wie exakt das SQL-Statement aussieht.
     
  5. Tom299, 29.03.2012 #5
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Ich bin gestern über ein ähnliches Problem bei ALTER TABLE gestossen, bis ich in der Beschreibung gesehen habe, daß rawQuery() nur verwendet wird, wenn die Abfrage ein Ergebnis zurückliefert. Für CREATE TABLE, ALTER TABLE usw. muß man execSQL() verwenden.

    Und man kann NICHT mehrere SQL-Statements mittels ; trennen, man muß für jedes einzelne Kommando eine Abfrage absetzen.
     

Diese Seite empfehlen