使用android快速开发框架afinal的FinalDb操作android数据库
2019獨角獸企業重金招聘Python工程師標準>>>
? ? ? ? ?今天給大家介紹下#afinal#來操作android的數據庫sqlite。
? ? ? ? ? ?#afinal#是一個android的orm、ioc快速開發框架,里面包含了四大功能:空間的id綁定和事件綁定功能;網絡圖片的顯示功能(里面包含了強大的緩存框架);數據庫sqlite的操作功能;http數據的讀取功能(支持ajax方式讀取);
? ? ? ? ? ?#afinal#開源網址:https://github.com/yangfuhai/afinal
? ? ? ? ? ? 這篇文章主要是介紹afinal的功能之一FinalDb組件,其他組件請關注我的博客吧,以后將會一一介紹:
? ? ? ? ? # afinal#的FinalDb組件是android的一個輕量級的orm框架,使用簡單,一行代碼就可以完成數據庫的各種操作功能。
?首先我們來創建一個測試實體類 User.java
package com.devchina.ormdemo;import java.util.Date;public class User {private int id;private String name;private String email;private Date registerDate;private Double money;/getter and setter 不能省略哦///public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Date getRegisterDate() {return registerDate;}public void setRegisterDate(Date registerDate) {this.registerDate = registerDate;}public Double getMoney() {return money;}public void setMoney(Double money) {this.money = money;}} 這個實體類要注意一點就是getter和setter是不能省略的哦,,,,因為afinal的finalDb最終會調用setter去給實體類的屬性賦值。
現在實體類創建完畢了,我們來寫我們的第一個demo:
AfinalOrmDemoActivity.java
package com.devchina.ormdemo;import java.util.Date; import java.util.List;import net.tsz.afinal.FinalActivity; import net.tsz.afinal.FinalDb; import net.tsz.afinal.annotation.view.ViewInject; import android.os.Bundle; import android.util.Log; import android.widget.TextView;public class AfinalOrmDemoActivity extends FinalActivity {@ViewInject(id=R.id.textView) TextView textView; //這里使用了afinal的ioc功能,以后將會講到@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);FinalDb db = FinalDb.create(this);User user = new User();user.setEmail("afinal@tsz.net");user.setName("探索者");user.setRegisterDate(new Date());db.save(user);List<User> userList = db.findAll(User.class);//查詢所有的用戶Log.e("AfinalOrmDemoActivity", "用戶數量:"+ (userList!=null?userList.size():0));textView.setText(userList.get(0).getName()+":"+user.getRegisterDate());} } 很簡單吧,就一個FinalDb db = FinalDb.create(this),然后db.save(user);就可以把我們定義的實體類保存到數據庫去啦。我們來看輸出日志:什么?就這樣就保存到sqlite數據庫里面去了?可是我們還沒有創建數據庫,也沒有創建表呀?怎么可能?
這里,我要跟大家說的是afinal自己去創建啦,簡單吧。
我們來看下adt的File Exploer 查看database目錄,下面確實有一個afinal.db文件,如下圖:
我們把afinal.db導出來后,通過sqlite數據庫打開afinal.db,如下圖:
同時afinal自動給我們創建來表:com_devchina_ormdemo_User,由此看出afinal會以類名為表名自動創建表:我們再過來看下表的數據:
到這里,相信大家能明白了,原理afinal自動給我們創建了數據庫afinal.db同時給我們創建了表com_devchina_ormdemo_User,保存的時候,afinal自動把數據保存到sqlite表里面去了。
這時候,估計大家的疑問又起來了
afinal自動創建了數據庫afinal.db,同時自動創建了表com_devchina_ormdemo_User。可是,我們不想創建數據庫afinal.db,也不想讓我們的表示com_devchina_ormdemo_User,那我們應該怎么辦呢?
這一些呀,afinal都已經想好了。
接下來,我們來介紹下afinal的orm注解功能。
第一個,配置數據庫中的表名 ?net.tsz.afinal.annotation.sqlite.Table,我們來給user,java配置一下:
package com.devchina.ormdemo;import java.util.Date;import net.tsz.afinal.annotation.sqlite.Table;@Table(name="user_test") public class User {private int id;private String name;private String email;private Date registerDate;private Double money;/getter and setter/////代碼太長,略getter setter,開發中不能省略 } 這里和上邊唯一不同的是 多了一個注解?@Table(name="user_test"),只要我們配置了這個以后,我們再來看下afinal創建的數據庫和表:
由此,我們可以看出來,afinal又自動給我們創建了表user_test,但是要注意的是com_devchina_ormdemo_User這個表afinal并沒有去刪除,所以這里也要提醒下大家,我們在重新設計了類的結構或者屬性的時候,先手動刪除掉直接的數據,否則就會有垃圾數據保存在數據庫里面,當然,不刪除也可以,不會有任何的影響。
在上面的講述中,細心的朋友可能會注意到了一個問題,afinal自動把user的id的這個屬性當做了主鍵。而且自動增長。
可是,可是在我們的開發過程中,我們的user可能沒有id這個屬性啊,可能是userId,或者又可能是其他我們喜歡的屬性,那怎么辦呢?
沒有關系:afinal有給我們準備了另一個注解:net.tsz.afinal.annotation.sqlite.Id,通過這個,我們就可以給我們的實體類定義主鍵啦
afinal的主鍵機制是:
當給某個屬性添加注解@id的時候,該屬性就是主鍵(一個類中只有一個主鍵),保存在數據庫中的列名為屬性的名稱,@Id(column="userId")給屬性添加注解的時候,保存在數據庫的列名是userId,當這個屬性沒有的時候,afinal自動回去該類查找_id屬性,_id屬性也沒有的時候,afinal就會自動去查找id屬性。如果連id屬性也沒有,那么afinal就報錯啦,afinal的orm規則中,表示必須有主鍵的,而且只能有一個(目前暫時不支持復合主鍵)。
回到剛才的問題,afinal給我們自動創建數據庫afinal.db,可是,我們不想創建讓數據庫名是afinal.db,那怎么辦呢?
afinal的創建時候有多個方法的重載。
在create的方法中,
isDebug表示是否是debug模式,debug模式中,使用afinal操作數據庫的時候就會答應SQL語句的log,
dbName就是數據庫的名稱啦。
所以這里,我們傳入我們自己想要的數據庫名稱就行了。
其實afinal的FinalDb模塊中,還有很多其他的功能,比如一對多,多對一的配置和注解等等。等待大家挖掘了。
afinal的orm注解中有:
Id------->注解注解
Property------>屬性注解
Table------->數據表注解
ManyToOne-------->多對一注解
OneToMany--------->一對多注解
Transient------->忽略屬性注解(如果該屬性添加這個注解,afinal的orm功能將忽略該屬性)
源代下載地址:
http://download.csdn.net/detail/michael_yy/4740088 ?
里面沒有jar包,自己去afinal的廣發網站下載最新jar包
轉載于:https://my.oschina.net/yangfuhai/blog/87459
總結
以上是生活随笔為你收集整理的使用android快速开发框架afinal的FinalDb操作android数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载] 晓说——第8期:镖局——最后的
- 下一篇: phpMyAdmin 尝试连接到MySQ