步驟:
(1). 創建數據表;
(2). DaoConfig 獲取數據庫的配置信息;
(3). 獲取數據庫實例: x.getDb(daoConfig);
(4). 數據庫的增刪改查。
1. 創建數據表
在這里要強調的是,數據庫里面表的創建的時間,只有在你對數據庫里面的操作涉及到這張表的操作時,會先判斷當前的表是否存在,如果不存在,才會創建一張表,如果存在,才會進行相應的CRUD操作。
1 @Table(name = "person") 2 public class person { 3 @Column(name = "ID", isId = true, autoGen = true) 4 public int id; 5 @Column(name = "NAME") 6 public String name; // 姓名 7 @Column(name = "AGE") 8 public int age; // 年齡 9 @Column(name = "SEX") 10 public String sex; // 性別 11
12 @Override
13 public String toString() { 14 return "person [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]"; 15 }
16 }
上表中包含了db相關注解:
1 @Check check約束 2 @Column 列名 3 @Finder 一對多、多對一、多對多關系(見sample的Parent、Child中的使用) 4 @Foreign 外鍵 5 @Id 主鍵,當為int類型時,默認自增。 非自增時,需要設置id的值 6 @NoAutoIncrement 不自增 7 @NotNull 不為空 8 @Table 表名 9 @Transient 不寫入數據庫表結構 10 @Unique 唯一約束
注解屬性
name (String) : 表名稱 isId (boolean) : 是否為主鍵 autoGen (boolean) : 是否自增(默認: false) proprety (String) : 是否為空(默認: NOT NULL)
2. DaoConfig 獲取數據庫的配置信息
1 //本地數據的初始化 2 DbManager.DaoConfig daoConfig = new DbManager.DaoConfig() 3 .setDbName("my_db.db") //設置數據庫名 4 .setDbVersion(1) //設置數據庫版本,每次啟動應用時將會檢查該版本號, 5 // 發現數據庫版本低於這里設置的值將進行數據庫升級並觸發DbUpgradeListener 6 .setAllowTransaction(true) //設置是否開啟事務,默認為false關閉事務 7 .setTableCreateListener(new DbManager.TableCreateListener() { 8 @Override 9 public void onTableCreated(DbManager dbManager, TableEntity<?> tableEntity) { 10 } 11 }) 12 .setDbOpenListener(new DbManager.DbOpenListener() { 13 @Override 14 public void onDbOpened(DbManager db) { 15 // 開啟WAL, 對寫入加速提升巨大 16 db.getDatabase().enableWriteAheadLogging(); 17 } 18 }) 19 // 設置數據庫創建時的Listener 20 .setDbUpgradeListener(new DbManager.DbUpgradeListener() { 21 @Override 22 public void onUpgrade(DbManager db, int oldVersion, int newVersion) { 23 // TODO: ... 24 // db.addColumn(...); 25 // db.dropTable(...); 26 // ... 27 // or 28 // db.dropDb(); 29 } 30 }); //設置數據庫升級時的Listener,這里可以執行相關數據庫表的相關修改,比如alter語句增加字段等 31 // .setDbDir(null);//設置數據庫.db文件存放的目錄,默認為包名下databases目錄下 32 33 DBManager db = x.getDb(daoConfig);
3. 獲取數據庫實例
DbManager db = x.getDb(daoConfig);
4. 表 操作
通過DbManager這類我們可以做如下操作:
.getDaoConfig // 獲取數據庫的配置信息 .getDatabase // 獲取數據庫實例 .replace // 只有存在唯一索引時才有用 (慎重) .dropTable // 刪除表 .addColumn // 添加一列 .dropDb // 刪除數據庫
5. 增 操作
1 try { 2 List<person> list = new ArrayList<person>(); 3 // ... 加載數據 4 5 db.save(list); // 保存實體類或者實體類的List到數據庫 6 db.saveOrUpdate(list); // 保存或更新實體類或者實體類的List到數據庫,根據id對應的數據是否存在 7 db.saveBindingId(list); // 保存實體類或實體類的List到數據庫,如果該類型的id是自動生成的,則保存完后會給id賦值 8 } catch (DbException e) { 9 }
6. 刪 操作
1 try { 2 db.delete(person.class);//該方法是刪除表中的全部數據 3 db.deleteById(person.class, 12);//該方法主要是根據表的主鍵(id)進行單條記錄的刪除 4 db.delete(person.class, WhereBuilder.b("age", ">", "20"));//根據where語句的條件進行刪除操作 5 List<person> findAll = db.selector(person.class).expr("age > 20").findAll(); 6 db.delete(findAll);//根據實體bean進行對表里面的一條或多條數據進行刪除 7 } catch (DbException e) { 8 }
7. 改 操作
1 // 第一種 2 try { 3 List<Person> findAll = db.findAll(Person.class); 4 for (Person person : findAll) { 5 person.setAge(10); 6 } 7 db.update(findAll, "age"); //可以使對象、集合 8 } catch (DbException e) { 9 } 10 // 第二種 11 try { 12 PersonTable person = db.findById(Person.class, 1); 13 person.setAge(25); 14 db.update(person, "age"); 15 } catch(DbException e){ 16 }
8. 查 操作
1 try { 2 db.findById(person.class, 1);//通過主鍵的值來進行查找表里面的數據 3 db.findFirst(person.class);//返回當前表里面的第一條數據 4 List<person> findAll = db.findAll(person.class);//返回當前表里面的所有數據 5 db.findDbModelAll(new SqlInfo("select * from person where age > 25")); 6 DbModel model = db.findDbModelFirst(new SqlInfo("select * from person where age > 25")); 7 model.getString("age");//model相當於游標 8 List<person> findAll2 = db.selector(person.class).expr("age >10").findAll();//主要是用來進行一些特定條件的查找 9 } catch (DbException e) { 10 }