2016-03-30 7 views
1

Ich versuche, die Daten in meine Tabelle Tareas einzufügen. Ich benutze einen ORM (GreenDao). Aber wenn meine App ausgeführt wird, zeigt die Log-Katze an, dass keine Tabelle namens Tareas existiert. Ich verstehe das nicht, denn wenn ich meine Datenbank erstellt habe, hat die Tareas-Tabelle eine Spalte namens Tipo.GreenDao- android.database.sqlite.SQLiteException: Tabelle TAREAS hat keine Spalte namens

03-30 07: 51: 29.389 bis 29.389 32,758/tipiwiny.greendao E/Android Runtime: schwerwiegendem EXCEPTION: Hauptprozeß: tipiwiny.greendao, PID: 29389 android.database.sqlite.SQLiteException: Tabelle tareas hat keine Spalte

namens TIPO (Code 1):, beim Kompilieren: INSERT INTO tareas ('_id', 'DURACION', 'TIPO', 'DESCRIPCION', 'USUARIO', 'realizada') VALUES (, ?,?,?,?,?) um android.database.sqlite.SQLiteConnection.nativePrepareStatement (Native Methode) um android.database.sqlite.SQLiteConnection.acquirePreparedStatement (SQLiteConnection.java:889) bei android.database.sqlite.SQLiteConnection.prepare (SQLiteConnection.java:500) bei android.database.sqlite.SQLiteSession.prepare (SQLiteSession.java:588) bei android.database.sqlite.SQLiteProgram. (SQLiteProgram .java-: 58) bei android.database.sqlite.SQLiteStatement (SQLiteStatement.java:31) bei android.database.sqlite.SQLiteDatabase.compileStatement (SQLiteDatabase.java:994) bei de.greenrobot.dao. .internal.TableStatements.getInsertStatement (TableStatements.java:48) bei de.greenrobot.dao.AbstractD ao.insert (AbstractDao.java:293) bei tipiwiny.greendao.CrearTarea.añadirTarea (CrearTarea.java:60) bei tipiwiny.greendao.CrearTarea.access $ 000 (CrearTarea.java:18) bei tipiwiny.greendao.CrearTarea $ 1.onClick (CrearTarea.java:42) bei android.view.View.performClick (View.java:4756) bei android.view.View $ PerformClick.run (View.java:19749) bei android.os. Handler.handleCallback (Handler.java:739) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:135) bei android.app.ActivityThread. Haupt (ActivityThread.java:5221) bei java.lang.reflect.Method.invoke (native Methode) bei java.lang.reflect.Method.invoke (Methode.java:372) atcom.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit. java: 899) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:694)

Meine Datenbank wird festgelegt, wie:

private static void createDatabase(Schema schema) { 
    Entity usuario = schema.addEntity("Usuario"); 
    usuario.addIdProperty(); 
    usuario.addStringProperty("nombre").notNull(); 
    usuario.addStringProperty("apellidos").notNull(); 
    usuario.addStringProperty("password").notNull(); 
    usuario.addStringProperty("roll").notNull(); 

    Entity habilidad = schema.addEntity("Habilidad"); 
    habilidad.addIdProperty(); 
    Property usuarioIdProperty = habilidad.addLongProperty("usuarioId").notNull().getProperty(); 
    habilidad.addToOne(usuario, usuarioIdProperty); 
    habilidad.addIntProperty("tipo").notNull(); 

    Entity tarea=schema.addEntity("Tareas"); 
    tarea.addIdProperty(); 

    tarea.addIntProperty("duracion").notNull(); 
    tarea.addIntProperty("tipo").notNull(); 
    tarea.addStringProperty("descripcion").notNull(); 
    tarea.addStringProperty("usuario"); 
    tarea.addBooleanProperty("realizada"); 


} 

Wenn Sie diesen Code ausführen zu generieren In den Tabellen wird die Klasse TareasDao angelegt und die Methode createTable lautet:

/** Creates the underlying database table. */ 
public static void createTable(SQLiteDatabase db, boolean ifNotExists) { 
    String constraint = ifNotExists? "IF NOT EXISTS ": ""; 
    db.execSQL("CREATE TABLE " + constraint + "'TAREAS' (" + // 
      "'_id' INTEGER PRIMARY KEY ," + // 0: id 
      "'DURACION' INTEGER NOT NULL ," + // 1: duracion 
      "'TIPO' INTEGER NOT NULL ," + // 2: tipo 
      "'DESCRIPCION' TEXT NOT NULL ," + // 3: descripcion 
      "'USUARIO' TEXT," + // 4: usuario 
      "'REALIZADA' INTEGER);"); // 5: realizada 
} 

Antwort

3

Versuchen Sie, die App zu deinstallieren und neu zu installieren.

Details:

Ein möglicher Grund könnte sein, dass Sie zuerst die Tabelle erstellt, lief die Migration und dann Felder später hinzugefügt.

So könnte es zwei mögliche Lösungen sein: -

1: Entfernen Sie die App auf Ihrem Telefon (deinstallieren) und es wird alle Tabellen mit ihm entfernen. Nach der Neuinstallation werden alle Tabellen neu erstellt.

2: Ändern Sie Ihre onUpdate Methode in DaoMaster, um alle Tabellen zu löschen und neu zu erstellen.

/** WARNING: Drops all table on Upgrade! Use only during development. */ 
public static class DevOpenHelper extends OpenHelper { 
    public DevOpenHelper(Context context, String name, CursorFactory factory) { 
     super(context, name, factory); 
     Log.i("greenDAO", "DevOpenHelper: constructor called"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); 
     //Remember to remove this line before moving to production. 
     dropAllTables(db,true); 
     onCreate(db); 
    } 
} 

Lassen Sie mich wissen, wenn Sie Hilfe brauchen :)

+1

Dank! Ich habe mein Problem gelöst. Ich habe die App von meinem Telefon entfernt und nachdem ich die Datenbank von Android Device Monitor entfernt habe. Schließlich kehrte ich zurück, um die Datenbank – tipiwiny

+0

zu generieren Bitte teilen Sie Ihre Lösung! Wie hast du das gemacht? –

+0

Entschuldigung, ich habe gerade meinen Kommentar bearbeitet. – tipiwiny

Verwandte Themen