日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

使用android快速开发框架afinal的FinalDb操作android数据库

發(fā)布時間:2025/3/15 数据库 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用android快速开发框架afinal的FinalDb操作android数据库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>


? ? ? ? ?今天給大家介紹下#afinal#來操作android的數(shù)據(jù)庫sqlite。

? ? ? ? ? ?#afinal#是一個android的orm、ioc快速開發(fā)框架,里面包含了四大功能:空間的id綁定和事件綁定功能;網(wǎng)絡(luò)圖片的顯示功能(里面包含了強大的緩存框架);數(shù)據(jù)庫sqlite的操作功能;http數(shù)據(jù)的讀取功能(支持ajax方式讀取);

? ? ? ? ? ?#afinal#開源網(wǎng)址:https://github.com/yangfuhai/afinal

? ? ? ? ? ? 這篇文章主要是介紹afinal的功能之一FinalDb組件,其他組件請關(guān)注我的博客吧,以后將會一一介紹:

? ? ? ? ? # afinal#的FinalDb組件是android的一個輕量級的orm框架,使用簡單,一行代碼就可以完成數(shù)據(jù)庫的各種操作功能。


?首先我們來創(chuàng)建一個測試實體類 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最終會調(diào)用setter去給實體類的屬性賦值。



現(xiàn)在實體類創(chuàng)建完畢了,我們來寫我們的第一個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", "用戶數(shù)量:"+ (userList!=null?userList.size():0));textView.setText(userList.get(0).getName()+":"+user.getRegisterDate());} } 很簡單吧,就一個FinalDb db = FinalDb.create(this),然后db.save(user);就可以把我們定義的實體類保存到數(shù)據(jù)庫去啦。我們來看輸出日志:

什么?就這樣就保存到sqlite數(shù)據(jù)庫里面去了?可是我們還沒有創(chuàng)建數(shù)據(jù)庫,也沒有創(chuàng)建表呀?怎么可能?

這里,我要跟大家說的是afinal自己去創(chuàng)建啦,簡單吧。

我們來看下adt的File Exploer 查看database目錄,下面確實有一個afinal.db文件,如下圖:

我們把afinal.db導(dǎo)出來后,通過sqlite數(shù)據(jù)庫打開afinal.db,如下圖:

同時afinal自動給我們創(chuàng)建來表:com_devchina_ormdemo_User,由此看出afinal會以類名為表名自動創(chuàng)建表:我們再過來看下表的數(shù)據(jù):

到這里,相信大家能明白了,原理afinal自動給我們創(chuàng)建了數(shù)據(jù)庫afinal.db同時給我們創(chuàng)建了表com_devchina_ormdemo_User,保存的時候,afinal自動把數(shù)據(jù)保存到sqlite表里面去了。


這時候,估計大家的疑問又起來了

afinal自動創(chuàng)建了數(shù)據(jù)庫afinal.db,同時自動創(chuàng)建了表com_devchina_ormdemo_User。可是,我們不想創(chuàng)建數(shù)據(jù)庫afinal.db,也不想讓我們的表示com_devchina_ormdemo_User,那我們應(yīng)該怎么辦呢?

這一些呀,afinal都已經(jīng)想好了。

接下來,我們來介紹下afinal的orm注解功能。

第一個,配置數(shù)據(jù)庫中的表名 ?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,開發(fā)中不能省略 } 這里和上邊唯一不同的是 多了一個注解?@Table(name="user_test"),只要我們配置了這個以后,我們再來看下afinal創(chuàng)建的數(shù)據(jù)庫和表:

由此,我們可以看出來,afinal又自動給我們創(chuàng)建了表user_test,但是要注意的是com_devchina_ormdemo_User這個表afinal并沒有去刪除,所以這里也要提醒下大家,我們在重新設(shè)計了類的結(jié)構(gòu)或者屬性的時候,先手動刪除掉直接的數(shù)據(jù),否則就會有垃圾數(shù)據(jù)保存在數(shù)據(jù)庫里面,當然,不刪除也可以,不會有任何的影響。


在上面的講述中,細心的朋友可能會注意到了一個問題,afinal自動把user的id的這個屬性當做了主鍵。而且自動增長。

可是,可是在我們的開發(fā)過程中,我們的user可能沒有id這個屬性啊,可能是userId,或者又可能是其他我們喜歡的屬性,那怎么辦呢?

沒有關(guān)系:afinal有給我們準備了另一個注解:net.tsz.afinal.annotation.sqlite.Id,通過這個,我們就可以給我們的實體類定義主鍵啦

afinal的主鍵機制是:

當給某個屬性添加注解@id的時候,該屬性就是主鍵(一個類中只有一個主鍵),保存在數(shù)據(jù)庫中的列名為屬性的名稱,@Id(column="userId")給屬性添加注解的時候,保存在數(shù)據(jù)庫的列名是userId,當這個屬性沒有的時候,afinal自動回去該類查找_id屬性,_id屬性也沒有的時候,afinal就會自動去查找id屬性。如果連id屬性也沒有,那么afinal就報錯啦,afinal的orm規(guī)則中,表示必須有主鍵的,而且只能有一個(目前暫時不支持復(fù)合主鍵)。


回到剛才的問題,afinal給我們自動創(chuàng)建數(shù)據(jù)庫afinal.db,可是,我們不想創(chuàng)建讓數(shù)據(jù)庫名是afinal.db,那怎么辦呢?

afinal的創(chuàng)建時候有多個方法的重載。

在create的方法中,

isDebug表示是否是debug模式,debug模式中,使用afinal操作數(shù)據(jù)庫的時候就會答應(yīng)SQL語句的log,

dbName就是數(shù)據(jù)庫的名稱啦。

所以這里,我們傳入我們自己想要的數(shù)據(jù)庫名稱就行了。

其實afinal的FinalDb模塊中,還有很多其他的功能,比如一對多,多對一的配置和注解等等。等待大家挖掘了。


afinal的orm注解中有:

Id------->注解注解

Property------>屬性注解

Table------->數(shù)據(jù)表注解

ManyToOne-------->多對一注解

OneToMany--------->一對多注解

Transient------->忽略屬性注解(如果該屬性添加這個注解,afinal的orm功能將忽略該屬性)


源代下載地址:

http://download.csdn.net/detail/michael_yy/4740088 ?

里面沒有jar包,自己去afinal的廣發(fā)網(wǎng)站下載最新jar包


轉(zhuǎn)載于:https://my.oschina.net/yangfuhai/blog/87459

總結(jié)

以上是生活随笔為你收集整理的使用android快速开发框架afinal的FinalDb操作android数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。