Android開(kāi)源框架集合分享-數(shù)據(jù)庫(kù)

? ? ? ? 上一次寫(xiě)到的圖像加載,這次中間間隔的時(shí)間稍微長(zhǎng)了一些,先對(duì)大家報(bào)個(gè)歉。說(shuō)實(shí)話,差點(diǎn)把這個(gè)事情給忘了。

虧得朋友的提醒,只顧整理忘記發(fā)了,真是罪過(guò)罪過(guò)。今天給大家分享的是在開(kāi)源框架中的有關(guān)數(shù)據(jù)庫(kù)的框架。

? ? ? ? 數(shù)據(jù)庫(kù)這個(gè)東西了解后端的小伙伴都知道,對(duì)程序的來(lái)說(shuō)是相當(dāng)重要。因?yàn)閿?shù)據(jù)是無(wú)價(jià)的,雖然現(xiàn)在有云存儲(chǔ),但是數(shù)

據(jù)庫(kù)這一關(guān)是躲不過(guò)去了。大家經(jīng)常聽(tīng)到的mysql,sqlserver,DB2,Oracle等一些知名的數(shù)據(jù)庫(kù)在各行各業(yè)應(yīng)用非常廣泛。

在我們android系統(tǒng)中自帶的輕量級(jí)的sqlite數(shù)據(jù)庫(kù),作為移動(dòng)端來(lái)說(shuō),足夠使用了。比較其他的確實(shí)用不了,手機(jī)內(nèi)存就那么

大,我們還要存儲(chǔ)我們寶貴的各種資源,確實(shí)裝不下。

? ? ? ? 使用數(shù)據(jù)庫(kù)最痛苦的事情,大概就是寫(xiě)sql語(yǔ)句,還好我們的一般都是簡(jiǎn)單的CRUD,并且涉及的表都是比較簡(jiǎn)單的,要是跟

后臺(tái)一樣,嵌套查詢能寫(xiě)一頁(yè),我估計(jì)android里面涉及的數(shù)據(jù)庫(kù)的部分的需求都要被改了。

現(xiàn)在來(lái)介紹一下,本人了解的一些數(shù)據(jù)庫(kù)框架和一些用法,有什么錯(cuò)誤的或者好的框架請(qǐng)各位朋友留言,不吝賜教一下

4.1數(shù)據(jù)庫(kù)_ormlite

主頁(yè):http://ormlite.com/(這個(gè)貌似需要翻墻)

*配置: 添加以下依賴

?compile 'com.j256.ormlite:ormlite-android:4.48'

compile 'com.j256.ormlite:ormlite-core:4.48'

用途: 操作數(shù)據(jù)庫(kù)

使用步驟

1.創(chuàng)建數(shù)據(jù)庫(kù)表結(jié)構(gòu)的實(shí)體類.示例代碼:

? ?@DatabaseTable(tableName = "user")

? ?public class User {

? ? ? ? ? ? ? ?@DatabaseField(generatedId = true)

? ? ? ? ? ? ? ?private int id;

? ? ? ? ? ? ? ?@DatabaseField(columnName = "name")

? ? ? ? ? ? ? ?private String name;

? ? ? ? ? ? ? ?@DatabaseField(columnName = "age")

? ? ? ? ? ? ? ?private int age;

? ? ? ? ? ? ? ?@DatabaseField(columnName = "tel")

? ? ? ? ? ? ? ?private String tel;

? ? ? ? ? ? ? ? public User() {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ?public User(String name, int age, String tel) {

? ? ? ? ? ? ? ? ? ? ? ? ? this.name = name;

? ? ? ? ? ? ? ? ? ? ? ? ? this.age = age;

? ? ? ? ? ? ? ? ? ? ? ? ? this.tel = tel;

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? }

2.創(chuàng)建OrmLiteSqliteOpenHelper的實(shí)現(xiàn)類.示例代碼:

public class UserDBOpenHelper extends OrmLiteSqliteOpenHelper {

? ? ? ? ? ?public UserDBOpenHelper(Context context) {

? ? ? ? ? ? ? ? ?super(context, "user.db", null, 1);

? ? ? ? ? ? }

? ? ? ? @Override

? ? ? ? public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {

? ? ? ? ? ?try {

? ? ? ? ? ? ? ? ? // 創(chuàng)建表

? ? ? ? ? ? ? ? ?TableUtils.createTable(connectionSource, User.class);

? ? ? ? ? ? ? ? ?} catch (SQLException e) {

? ? ? ? ? ? ? ? ? ? ?e.printStackTrace();

? ? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? }

? ? ? ?@Override

? ? ? ? public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {

? ? ? ? ? ? try {

? ? ? ? ? ? ? ? // 更新表

? ? ? ? ? ? ? ?TableUtils.dropTable(connectionSource, User.class, true);

? ? ? ? ? ? ? ?onCreate(database, connectionSource);

? ? ? ? ? ? ? ?} catch (SQLException e) {

? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? ?}

? ? ? ?}

? ? ? ? ? ?private static UserDBOpenHelper instance;

? ? ? ? ? ?public static synchronized UserDBOpenHelper getInstance(Context context) {

? ? ? ? ? ?if (instance == null) {

? ? ? ? ? ? ? ? ?synchronized (UserDBOpenHelper.class) {

? ? ? ? ? if (instance == null) {

? ? ? ? ? instance = new UserDBOpenHelper(context);

? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ?}

? ?}

? ? return instance;

}

? ? ? ?private Dao dao;

? ? ? ?// 獲取操作數(shù)據(jù)庫(kù)的DAO

? ? ? public Dao getUserDao() throws SQLException {

? ? ? if (dao == null) {

? ? ? ? ? ? dao = getDao(User.class);

? ? ? ? ?}

? ? ? ? ? return dao;

? ? ? }

? ? ?@Override

? ? ?public void close() {

? ? ? ? ?super.close();

? ? ? ? ?dao = null;

? ? ? ? ?}

?}

3.獲取數(shù)據(jù)庫(kù)的DAO對(duì)象, 即可進(jìn)行增刪改查的操作.示例代碼:


? ? ? ?UserDBOpenHelper helper = new UserDBOpenHelper(this);

? ? ? ?Dao dao =??helper.getUserDao();

? ? ? ?User user = new User("zhangsan", 12, "13212345678");

? ? ? ?// 增

? ? ? dao.create(user);

? ? ? ?// 改

? ? ? dao.updateRaw("update user set tel = '18882348888' where name = ?", new String[]{"王武"});

? ? ? // 查

? ? ? List query = dao.queryForEq("name", "王武");

? ? ? // 刪

? ? ? dao.deleteById(2);

4.2數(shù)據(jù)庫(kù)_greenDAO(這個(gè)使用頻率比較高)

主頁(yè):https://github.com/greenrobot/greenDAO

配置: 添加以下依賴

官方文檔最新的配置

文檔最新配置

優(yōu)點(diǎn):

性能最大化,內(nèi)存開(kāi)銷最小化

易于使用的API

為Android進(jìn)行高度優(yōu)化

使用步驟

1.創(chuàng)建自定義的DAOGenerater,指定數(shù)據(jù)庫(kù)相關(guān)配置并生成相關(guān)類

public class CustomDAOGenerater {

? ? ? ? ? public static void main(String[] args) throws Exception {

? ? ? ? ? // 第一個(gè)參數(shù)為數(shù)據(jù)庫(kù)版本

? ? ? ? ? //第二個(gè)參數(shù)為數(shù)據(jù)庫(kù)的包名

? ? ? ? ? Schema schema = new Schema(1, "com.alpha.db");

? ? ? ? ?// 創(chuàng)建表,參數(shù)為表名

? ? ? ? ?Entity entity = schema.addEntity("Info");

? ? ? ? ?// 為表添加字段

? ? ? ? entity.addIdProperty();// 該字段為id

? ? ? ? entity.addStringProperty("name");// String類型字段

? ? ? ? entity.addIntProperty("age");//Int類型字段

? ? ? ?entity.addStringProperty("tel");// String類型字段

? ? ? ? // 生成數(shù)據(jù)庫(kù)相關(guān)類

? ? ? ? //第二個(gè)參數(shù)指定生成文件的本次存儲(chǔ)路徑,AndroidStudio工程指定到當(dāng)前工程的java路徑

? ? ? ? ? ? ?new DaoGenerator().generateAll(schema, "C:\\Users\\Alpha\\AndroidStudioProjects\\GreenDaoDemo\\app\\src\\main\\java");

? ? ? ? ? ? }

? }

2.在Application中通過(guò)DaoMaster.DevOpenHelper初始化數(shù)據(jù)庫(kù)

? ? ? ? ? ? ? // 該初始化過(guò)程最好放在Application中進(jìn)行,避免創(chuàng)建多個(gè)Session

? ? ? ? ? ? ? private void setupDatabase() {

? ? ? ? ? ? ? ? ? ? // 通過(guò) DaoMaster 的內(nèi)部類 DevOpenHelper創(chuàng)建數(shù)據(jù)庫(kù)

? ? ? ? ? ? ? ? ? ?// 注意:默認(rèn)的 DaoMaster.DevOpenHelper 會(huì)在數(shù)據(jù)庫(kù)升級(jí)時(shí),刪除所有的表

? ? ? ? ? ? ? ? ? ?// 所以,在正式的項(xiàng)目中,你還應(yīng)該做一層封裝,來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的安全升級(jí)。

? ? ? ? ? ? ? ? ? ?/**

? ? ? ? ? ? ? ? ? ? ?* @param context : Context

? ? ? ? ? ? ? ? ? ? ?* @param name : 數(shù)據(jù)庫(kù)名字

? ? ? ? ? ? ? ? ? ? ?* @param factory : CursorFactroy

? ? ? ? ? ? ? ? ? ? */

? ? ? ? ? ? ? ? ? DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "student.db", null);

? ? ? ? ? ? ? ? ? // 獲取數(shù)據(jù)庫(kù)

? ? ? ? ? ? ? ? ? SQLiteDatabase database = helper.getWritableDatabase();

? ? ? ? ? ? ? ? ? // 獲取DaoMaster

? ? ? ? ? ? ? ? ?DaoMaster daoMaster = new DaoMaster(database);

? ? ? ? ? ? ? ? ? // 獲取Session

? ? ? ? ? ? ? ? DaoSession daoSession = daoMaster.newSession();

? ? ? ? ? ? ? ? ?// 獲取對(duì)應(yīng)的表的DAO對(duì)象

? ? ? ? ? ? ? ? InfoDao dao = daoSession.getInfoDao();

? ? ? ? ? ?}

3.獲取數(shù)據(jù)庫(kù)的DAO對(duì)象,即可進(jìn)行增刪改查的操作

? ? ? ? ? ? ?// 增

? ? ? ? ? ? dao.insert(new Info(null, "zhangsan", 12, "13112345678"));

? ? ? ? ? ? // 刪

? ? ? ? ? ?dao.deleteByKey(1L);

? ? ? ? ? ?// 改

? ? ? ? ? ?Info info = new Info(3L, "趙琦", 78, "18812348888");

? ? ? ? ? ?dao.update(info);

? ? ? ? ? ?// 查

? ? ? ? ? ?QueryBuilder builder = dao.queryBuilder();

? ? ? ? ? ?builder.where(InfoDao.Properties.Name.eq("lisi"));

? ? ? ? ? Query build = builder.build();

? ? ? ? ? List list = build.list();

?4.3數(shù)據(jù)庫(kù)_Litepal

主頁(yè) :https://github.com/LitePalFramework/LitePal(這個(gè)文檔寫(xiě)的很全)

中文文檔地址: http://blog.csdn.net/sinyu890807/article/category/2522725(感覺(jué)英文別扭的可以看一下分享的博客)

4.4 數(shù)據(jù)庫(kù)_android-lite-orm(國(guó)內(nèi)大神寫(xiě)的,用著挺好用)

主頁(yè):https://github.com/litesuits/android-lite-orm

1.創(chuàng)建數(shù)據(jù)庫(kù)

文檔上解釋:

? ? ? ? 一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè)LiteOrm的實(shí)例,如果一個(gè)App只有一個(gè)數(shù)據(jù)庫(kù),那么LiteOrm應(yīng)該是全局單例的。 如果多次新建LiteOrm實(shí)例,系統(tǒng)會(huì)提示你應(yīng)該關(guān)閉之前的數(shù)據(jù)庫(kù),也可能會(huì)引起其他未知錯(cuò)誤。

創(chuàng)建數(shù)據(jù)庫(kù)

2.建表邏輯

該框架會(huì)在你新建一個(gè)model的時(shí)候,自動(dòng)的為你創(chuàng)建一個(gè)表,作為使用者的我們,直接操作對(duì)象即可。相當(dāng)于就是建表語(yǔ)句

不過(guò)這樣做,操作更高效

建立操作對(duì)象

LiteOrm將為開(kāi)發(fā)者建一個(gè)名為“test_model”的數(shù)據(jù)庫(kù)表,其字段為:id name login。 建表語(yǔ)句:CREATE TABLE IF NOT EXISTS test_model (id INTEGER PRIMARY KEY AUTOINCREMENT ,name TEXT, login TEXT DEFAULT true)。

3.數(shù)據(jù)庫(kù)的一些CRUD操作


簡(jiǎn)單的操作

這個(gè)數(shù)據(jù)庫(kù)框架是國(guó)內(nèi)的大神的寫(xiě)的,簡(jiǎn)單易操作。集成非常簡(jiǎn)單,有興趣的可以參照示例,與之前介紹的框架相比,這個(gè)框架

算是最簡(jiǎn)單的一個(gè),也是文檔介紹比較全面的一個(gè),總的來(lái)說(shuō)簡(jiǎn)單易懂易集成。

? ? ? ? 以上就是關(guān)于android數(shù)據(jù)庫(kù)框架的內(nèi)容,數(shù)據(jù)庫(kù)這個(gè)東西說(shuō)重要吧,確實(shí)重要,但是作為客戶端的我們確實(shí)平常使用頻率

非常之低,而不像后臺(tái)基本上做一個(gè)東西都要跟其深入交流一下,不過(guò)作為知識(shí)的拓展多了解一些,對(duì)我們將來(lái)的發(fā)展還是很有

幫助的。上面的資料大部分都是實(shí)踐過(guò)的,如果有什么不對(duì)的地方,請(qǐng)各位朋友及時(shí)的指出來(lái),不吝賜教。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • GreenDao 介紹:greenDAO是一個(gè)對(duì)象關(guān)系映射(ORM)的框架,能夠提供一個(gè)接口通過(guò)操作對(duì)象的方式去操...
    小董666閱讀 846評(píng)論 0 1
  • greenDao的介紹 greenDao是Android數(shù)據(jù)庫(kù)ORM(object/relational mapp...
    K線中有財(cái)富密碼閱讀 2,207評(píng)論 0 2
  • 沒(méi)錯(cuò),就像標(biāo)題說(shuō)的那樣,只要你能根據(jù)提示猜出我畫(huà)中人的名字(本名和角色名都可),獲得順位第一個(gè)最高得分,我就為你畫(huà)...
    四月青閱讀 2,181評(píng)論 101 60
  • 我的前半生劇情已經(jīng)急轉(zhuǎn)直下,越來(lái)越不忍直視。 閨蜜撕X大戰(zhàn)即將拉開(kāi)序幕,有人歡喜有人愁。 喜的人吃著瓜看的興趣盎然...
    喜歡月亮的加菲貓閱讀 460評(píng)論 0 1

友情鏈接更多精彩內(nèi)容