SQLiteManager,SQlite數據庫框架:LitePal

 2023-12-25 阅读 28 评论 0

摘要:常用的數據庫框架Android的發展的速度是難以置信的,Android出來哪一年我還在小學上學很,還能很清楚的記得,那年一切,但是那個時候的我怎么可能也不會想到自己將來會要去做Android.Android數據庫的框架很多,選擇自己喜歡的,不用掌握很多,選擇自己喜歡的就好. SQLiteManager。Su

常用的數據庫框架
Android的發展的速度是難以置信的,Android出來哪一年我還在小學上學很,還能很清楚的記得,那年一切,但是那個時候的我怎么可能也不會想到自己將來會要去做Android.Android數據庫的框架很多,選擇自己喜歡的,不用掌握很多,選擇自己喜歡的就好.

SQLiteManager。Sugar&GreenDao&Afinal&ORMLite&Realm&LiteOrm&DBFlow&ActiveAndroid&LitePal

SugarORM 是對象關系映射模式。不用寫復雜的sql語句,而用簡單的API即可完成創建和操縱數據;可以在原有的Bean上僅僅添加小的修改而復用Bean;簡化而明了的數據庫設計和創建過程,同時提供表的一對多的支持。

數據庫有哪些類型,GreenDao 是為Android設計的對象關系映射(ORM)工具。它提供了對象到關系型數據庫SQLite的相應接口。為了在Android工程中使用greenDao,需要創建另一個“生成器”工程,它的任務是在你的工程域里生成具體的代碼。因此相比與其它ORM框架具有出眾性能。

Afinal 是一個android的sqlite orm 和 ioc 框架。同時封裝了android中的http框架,使其更加簡單易用。FinalDB模塊,android中的orm框架,一行代碼就可以進行增刪改查。支持一對多,多對一等查詢。

ORMLite (Object Relational Mapping Lite)提供了一些輕量級持久化Java對象到SQL數據庫,同時也避免了復雜性和更多的標準的ORM包的開銷功能。它支持的SQL數據庫使用JDBC的數量,還支持原生的Android操作系統數據庫API調用sqlite。

Realm 是用來替代sqlite的一種解決方案,它有一套自己的數據庫存儲引擎,比sqlite更輕量級,擁有更快的速度,并且具有很多現代數據庫的特性,比如支持JSON,流式api,數據變更通知,自動數據同步,簡單身份驗證,訪問控制,事件處理,最重要的是跨平臺,目前已有Java,Objective C,Swift,React-Native,Xamarin這五種實現。

LiteOrm 是android上的一款數據庫(ORM)框架庫。速度快、體積小、性能高。開發者基本一行代碼實現數據庫的增刪改查操作,以及實體關系的持久化和自動映射。設計原則:輕量、專注、性能優先、線程無關,專注數據及其關系存儲和操作;無需工具輔助,不需要無參構造,不需要繁多注解,約定優于配置;使用極致簡約,例如:db.save(u); db.query(U.class); db.deleteAll(U.class);。

DBFlow 綜合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等庫的優點。同時不是基于反射,所以性能也是非常高,效率緊跟greenDAO其后。基于注解,使用apt技術,在編譯過程中生成操作類,使用方式和ActiveAndroid高度相似,使用簡單。無縫支持多個數據庫,使用annotation processing提高速度,ModelContainer類庫可以直接解析像JSON這樣的數據,增加靈活性的豐富接口。

ActiveAndroid 是采用活動記錄(Active Record)架構模式設計的適用于Android平臺的輕量級ORM架構

LitePal 是對象關系映射(ORM)模型。它使開發者使用SQLite數據庫變得非常容易。 你可以不用寫一句SQL語句就可以完成大部分數據庫操作,包括創建表,更新表,約束操作,聚合功能等等。

?
LitePal
LitePal的集成和簡單的使用
LitePal中實現增刪改查
LitePal一些常用的API介紹
?
LitePal的集成和簡單的使用
引入相應的類庫
compile 'org.litepal.android:core:1.6.1'
這個可以去項目源碼中找到最新的類庫

創建相應的litepal.xml文件
首先這個文件是在相應的assets文件夾下(創建方法為項目文件夾下New->Folder->Assets Folder就可以創建相應的assets文件夾了),然后在assets文件夾下創建一個相應的litepal.xml文件夾,下面是具體的內容:

<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="file"/>
<version value="1"/>
<list>
<mapping class="com.hejin.download.FileInfo"/>
</list>
</litepal>
這里說明幾點問題:

dbname標簽是相應的數據庫名稱

version標簽是相應的數據庫的版本,這里注意當里面引用的內容發生改變的時候,要升級相應的版本

list標簽是那些對象需要數據庫管理,這里注意mapping里面的路徑一定要是全路徑名稱

這里面list標簽中的實體類都應該繼承DataSupport這個類,這個千萬別忘記

更換繼承的Application
這里其實份兩種情況:

已經有繼承的Application

直接繼承LitePalApplication

為什么分為這兩種情況呢?因為有的項目中可能之前實現Application已經繼承了一個其他類型的Application了,那么這個時候因為java的單繼承,所以這里就不能直接繼承LitePalApplication了,但是LitePal已經幫我們想到這個問題了,所以說下面我們分兩種情況實現一下:

第一種

直接在相應項目中的Application中的onCreat()方法中初始化一下就可以了,像下面這樣:

@Override
public void onCreate() {
super.onCreate();
LitePal.initialize(this);
}
這樣你的Application可以隨便繼承其他的Application

在manifest.xml中引入相應的Application,也就是你之前的Application

第二種

直接繼承相應的LitePalApplication這里就不用在onCreat()中調用LitePal.initialize(this);這個方法了;

這個就比較特殊了要在相應的application標簽中添加Application的時候要這樣寫android:name="org.litepal.LitePalApplication"

?
LitePal中實現CRUD(增刪改查)
LitePal添加數據
關于相應的增加操作,這里主要是通過對象的save()進行的,怎么說呢?其實你只要給相應的類添加了相應的集體參數然后調用相應的save()方法就可以了.具體代碼如下:

LitePalBean zhangSanBean = new LitePalBean("張三", "20", "男");
zhangSanBean.save();
LitePalBean liSiBean = new LitePalBean("李四", "25", "男");
liSiBean.save();
這樣就形成了相應的數據庫的表結構了,也就是有了相應的數據庫了,但是如果你在手機上調試的不Root的話是看不到的.這里說明一個問題添加相同的內容是可以添加進去的

LitePal刪除數據
關于刪除數據的操作,這里主要是通過對象的delete()或者deleteAll()進行刪除,具體代碼如下:

/*這里就是刪除所有名字是張三的*/
DataSupport.deleteAll(LitePalBean.class, "name =?", "張三");

LitePalBean zhangSanBean = new LitePalBean("張三", "20", "男");
zhangSanBean.save();
zhangSanBean.delete();
這里刪除的兩種方式:

直接對象刪除:也就是對象直接調用delete();方法進行;

根據類型進行刪除,其實這里就是相當于SQLite進行刪除,這里有必要說明一下第二個語句傳入內容如果為"name=?"代表的是所有name為后面字段的內容,也就是所有名字為張三的內容都會刪除.那么你會問了如果這里面我傳入兩個內容呢?比如"name=? and age=?"對沒錯,就是用and進行連接

LitePal更新數據
這里其實很簡單,就是更改完相應的數據直接save保存就可以了,代碼如下:

LitePalBean zhaoWuBean = new LitePalBean("趙五", "25", "男");
zhaoWuBean.save();
zhaoWuBean.setAge("30");
zhaoWuBean.save();
這里有一個問題,感覺應該是先取出來這個對象在進行操作才對,才能確保內容的正確性.

LitePal查詢方法
關于查詢數據的操作,主要用到find()和findAll()等相應的方法,具體代碼如下:

List<LitePalBean> all = DataSupport.findAll(LitePalBean.class);
for (int i = 0; i < all.size(); i++) {
Log.e(TAG, "query: " + all.get(i).toString());
}
}
?
LitePal常用的API
DataSupport.findFirst(XXX.class)
查詢XXX列表中的第一個元素

DataSupport.findLast(XXX.class)
查詢XXX列表中的最后一個元素

DataSupport.select()
根據SQLite中的關鍵字進行查找,例如DataSupport.select("name","age").find(XXX.class) 查詢的是相應名字和年齡的兩列數據 其他的數據是查不出來的.

DataSupport.where()
相當于SQLite中的where關鍵字查找,這里還是舉個例子->DataSupport.where("name=?","張三").find(XXX.class) 查詢的是所有名字為張三的數據內容;

DataSupport.order()
相當于SQLite中的order關鍵字查找,主要是排序方式,這里還是舉個例子->DataSupport.order(price desc).find(XXX.class) 這里面是按照降序進行排列的;desc標識降序排列,**asc
**代表升序排列

DataSupport.limit()
查詢數據庫的結果的數量 例子->DataSupport.limit(3).find(XXX.class); 查詢3條數據

DataSupport.offset()
查詢制定結果的偏移量 例子(我想查詢第二條第三條和第四條)-> DataSupport.limit(3).offset(1).find(XXX.class); 這里是從第一條開始,但是不包含相應的第一條

?
---------------------?

轉載于:https://www.cnblogs.com/hyhy904/p/10987459.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/194873.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息