標籤:
ActiveAndroid是一個開源的資料庫架構,使我們在Android中使用資料庫變得更為簡單,今天我們就來看看這個資料庫架構的使用。
1.引入ActiveAndroid
首先建立我們自己的項目,在我們的項目中引入ActiveAndroid,引入ActiveAndroid需要我們修改兩個地方,一個全域gradle檔案,還有一個是局部gradle檔案,修改方式如下:
全域gradle檔案,在jcenter()下方添加如下代碼:
mavenCentral() maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
局部gradle檔案修改:
compile ‘com.michaelpardo:activeandroid:3.1.0-SNAPSHOT‘
2.建立表及資料庫2.1. 表的建立
將ActiveAndroid引入到我們的項目中後,我們就可以開始使用這個東東了,如果大家使用Java中的Hibernate資料庫架構,就會覺得ActiveAndroid很簡單了。在這裡我們需要寫一個類繼承自Model這個類,如下:
@Table(name = "user_table", id = "_id")public class UserEntity extends Model { @Column private String username; @Column private int age; @Column private String nickname; public UserEntity() { } public UserEntity(int age, String nickname, String username) { this.age = age; this.nickname = nickname; this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; }}
這裡有幾個地方需要解釋一下:
1.類名上的@Table註解中有兩個值,分別是name="user_table"以及id="_id",其中name="user_table"表示一會產生的表的名稱為user_table,不寫的話預設為實體類的名稱,id="_id"表示表的id欄位的名稱,預設為Id,但是我們在Android開發中一般將表中的id欄位名稱定義為_id,所以這裡設定id="_id"
2.在每一個屬性名稱的上方都有一個@Column註解,該註解表示該欄位是表中的一個欄位,不加這個註解表示該欄位不是表中的欄位。
2.2. 資料庫名稱的修改以及版本的配置
預設情況下建立的資料庫名稱為Application.db,如果我們需要修改資料庫名稱以及進行版本管理需要在資訊清單檔中添加如下節點:
<meta-data android:name="AA_DB_NAME" android:value="Pickrand.db" /> <meta-data android:name="AA_DB_VERSION" android:value="5" />
其中AA_DB_NAME表示資料庫的名稱,AA_DB_VERSION表示資料庫的版本號碼,做android開發的筒子們都知道版本號碼對於一個資料來說非常重要,資料庫的版本升級離不開版本號碼。
2.3資料庫升級以及表的修改
使用ActiveAndroid進行資料庫升級稍微有一點點麻煩(個人覺得),假設我需要給資料庫中的表添加一個欄位該怎麼做呢?有以下三個步驟:
1. 首先我需要修改我在上面定義的實體類,假設我想在添加一個性別欄位,那我需要修改實體類如下:
@Table(name = "user_table", id = "_id")public class UserEntity extends Model { @Column private String username; @Column private int age; @Column private String nickname; @Column//性別欄位,新添加的欄位 private String gender;..................}
2. 在資訊清單檔中修改資料庫的版本號碼,新的版本號碼是原版本號碼加1,比如原來的版本號碼是1,那我現在改為2
3.添加遷移指令碼,最後我還需要添加一個資料庫遷移指令碼。在我項目的assets檔案夾中添加一個子檔案夾叫做migrations,在這個字檔案夾中添加遷移指令碼,指令碼的名稱為當前資料庫最新版本號碼.sql,假設我最新的資料庫版本號碼為2,那麼我的遷移指令碼的名稱就為2.sql。針對我上面資料庫升級的情況(添加一個欄位),我的遷移指令碼內容如下:
ALTER TABLE user_table ADD COLUMN nickname;
OK,完成以上三步,我的新欄位就可以成功的添加到我的表中了。
3.增刪改查
完成以上步驟之後,接下來我們就可以來看看資料庫中的增刪改查操作了。
3.1增
添加資料太easy了,我只需要new一個實體類出來,然後調用這個實體類的save方法即可,咦,我的實體類哪來的save方法呢?別忘了,我的實體類繼承自Model類哦。OK,那我們來看一個簡單的插入操作:
UserEntity userEntity = new UserEntity(56, "李四", "lisi"); userEntity.save();
建立一個UserEntity的執行個體,然後調用該執行個體的save方法即可。然後我們來看看資料庫:
OK,資料已經添加到表中了。當然,這個save方法有一個傳回值,這個傳回值表示當前插入的資料的id。
3.2刪
針對刪除操作,ActiveAndroid提供了兩種解決方案,一種是已知id,使用者需要按id對資料進行刪除,如下:
UserEntity.delete(UserEntity.class, 4);
表示刪除_id為4的資料。
第二種刪除方式:
Delete delete = new Delete(); delete.from(UserEntity.class).where("age=‘89‘").and("nickname=‘李四‘").execute();
表示刪除age=89並且nickname=李四的資料,當然還有各種左串連右串連ActiveAndroid也都是支援的。
3.3改
Update update = new Update(UserEntity.class); update.set("nickname=‘王五‘").where("age=‘89‘").execute();
修改也是很簡單的,上面這兩行代碼錶示將age為89的資料中的nickname改為王五。這裡不支援and語句,如果筒子們有多個查詢條件可以一起放在where語句中執行,如下:
Update update = new Update(UserEntity.class); update.set("nickname=‘王五‘").where("age=‘89‘ and nickname=‘zhangsan‘").execute();
3.4查
Select select = new Select(); List<UserEntity> list = select.from(UserEntity.class).execute(); for (UserEntity userEntity : list) { Log.d("google_lenve_fb", "select: " + userEntity.toString()); }
上面代碼錶示查詢user_table表中所有的資料,查詢結果直接返回一個List集合。我們可以直接遍曆這個List集合并將其顯示出來。查詢條件也支援where以及各種左串連,右串連分頁查詢等。如下:
List<UserEntity> list = select.from(UserEntity.class).where("").and("").as("").groupBy("").having("").offset("").limit("").execute();
4.優勢與劣勢
整體上來說,ActiveAndroid還是很好用的,極大的方便了我們的資料庫操作,簡化了代碼操作,加上ActiveAndroid對版本升級較完美的支援,使得它更加的靈活。
但是大家也知道,這種架構之所以方便是在犧牲一部分效能的條件下獲得的,執行效率肯定不如我們自己寫的CRUD語句,所以筒子們在工作中要根據自己的實際情況來選擇是否用該架構。
以上。
玩轉Android之資料庫架構ActiveAndroid的使用