dbflow 批量 增刪查改


@ModelContainer
@Table(database = DemoDatabase.class)
class Person extends BaseModel implements Serializable {
    @PrimaryKey()
    int uid;
    @Column
    int age;
    @Column
    String name;

    ....
    ....  
}

下面例子主要用以上實體類。

1、可以通過增加外鍵來關聯查詢

// 比如增加infoId作為外鍵

// 1 查詢
// 使用Table類進行字段查詢
List<Person> persons = new Select().from(Person.class)
                .where(Person_Table.infoId.eq(infoId))
                .queryList();

// 2 刪除
// 可通過寫Condition條件進行刪除。
SQLCondition condition = Condition.column(Person_Table.infoId.getNameAlias()).eq(infoId);

Delete.table(Person.class).where(condition);

2、通過in進行操作。

List<Integer> uidList = new ArrayList<>();
SQLCondition condition = Condition.column(Person_Table.uid.getNameAlias()).in(uidList);

// 1 查詢
List<Person> persons = new Select().from(Person.class)
                .where(condition)
                .queryList();

// 2 刪除
Delete.table(Person.class, condition);

dbflow保存操作:

在github 的 issue上有一個bug,上面說,db.reset();后,保存會出現主鍵是唯一的異常。我更新了beta6后,發現不能使用一個批量保存list的方法了。

即是使用:

new SaveModelTransaction<>(ProcessModelInfo.withModels(peoples)).onExecute();

在save方法上出現如下異常:

android.database.sqlite.SQLiteConstraintException: PRIMARY KEY must be unique
....
....
....

這個相關聯的類以及方法,全部在beta6版本中去除。然后只提供了事務管理。

讓我們自己去實現事務批量保存,結果可以了。完美兼容。

DatabaseDefinition database = FlowManager.getDatabase(DemoDatabase.class);
        Transaction transaction = database.beginTransactionAsync(new ITransaction() {
            @Override
            public void execute(DatabaseWrapper databaseWrapper) {
          // todo 處理list保存
          ...
          ...
       }
        }).build();
transaction.execute();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM