2017-09-06 4 views
0

J'essaie d'en savoir plus sur DBFlow, car dans le projet sur lequel je travaille en ce moment, le précédent a décidé de l'utiliser. Donc, dans la classe de base de données, j'ai ceci:Android - script de migration DBflow

@Database(name = ConstructDB.NAME, version = ConstructDB.VERSION) 
public class ConstructDB { 
    public static final String NAME = "construct_v3"; 
    public static final int VERSION = 18; 

    @Migration(version = 17, database = ConstructDB.class) 
    public static class Migration17 extends AlterTableMigration<Task> { 
    public Migration17(Class<Task> table) { 
     super(table); 
    } 

    @Override 
    public void onPreMigrate() { 
     super.onPreMigrate(); 
     addColumn(SQLiteType.INTEGER, NAMES.DB.READ_COUNT); 
    } 
    } 
} 

Ceci est le script de migration précédent. Donc maintenant je veux ajouter une nouvelle colonne à cette même table. J'ai fait les changements requis dans la classe de la table (comme l'ajout de la colonne, la méthode set et get, etc.). Et je veux écrire un nouveau script pour accepter mes changements. Alors je l'ai fait:

@Database(name = ConstructDB.NAME, version = ConstructDB.VERSION) 
public class ConstructDB { 
    public static final String NAME = "construct_v3"; 
    public static final int VERSION = 19; 

    @Migration(version = 18, database = ConstructDB.class) 
    public static class Migration18 extends AlterTableMigration<Task> { 
    public Migration18(Class<Task> table) { 
     super(table); 
    } 

    @Override 
    public void onPreMigrate() { 
     super.onPreMigrate(); 
     addColumn(SQLiteType.TEXT, NAMES.DB.CATEGORY_ID); 
    } 
    } 
} 

Mais quand je lance le projet, je reçois beaucoup d'erreurs comme:

error: cannot find symbol 
import com.construct.v2.dagger.DaggerConstructComponent; 

et surtout des erreurs comme celle-ci (something_table, qui sont toutes les tables dans ma base de données Cette. fichiers _Table sont dans le dossier de construction et ils ne doivent pas être modifiés):

error: cannot find symbol 
import com.construct.v2.models.Attachment_Table; 

Si je retourne à l'état que j'avais avant mes changements (dans le modèle de travail et le script de migration) le code fonctionne très bien. Donc, je pense que je fais quelque chose de mal ou de sauter un pas. Comment puis-je exécuter le script de migration? Quels autres changements dois-je faire?

Répondre

0

Vous devez ajouter une nouvelle classe de migration pour vos modifications. La version de migration doit être identique à la version DB. Vérifiez également si vous utilisez les bons types de données (votre chaîne d'identification est-elle?). Voir ce guide pour les migrations: https://agrosner.gitbooks.io/dbflow/content/Migrations.html