1. Wir haben diesmal 2 Gewinnspiele zeitgleich für euch - Gewinne einmal ein UMI Plus E - Beim 2ten könnt ihr ein Nomu S30 gewinnen!
  1. lord_fritte, 27.03.2012 #1
    lord_fritte

    lord_fritte Threadstarter Fortgeschrittenes Mitglied

    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

    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

    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

    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

    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