多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android數據庫框架——ORMLite輕量級的對象關系映射(ORM)Java包

Android數據庫框架——ORMLite輕量級的對象關系映射(ORM)Java包

來源:程序員人生   發布時間:2016-07-26 13:24:58 閱讀次數:3888次

Android數據庫框架——ORMLite輕量級的對象關系映照(ORM)Java包


這里寫圖片描述

事實上,我想寫數據庫的動機已很久了,在之前寫了1個答題系統的小項目那只是初步的帶了1下數據庫數據庫是比較強大的,不是我們3言兩語就可以解決的,我1直想抽個時間自己再過1遍Sqlite和JDBC的,但是,大家也知道,雜事比較多,我們來講1下數據庫的框架吧,事實上市面上,我覺得還可以的數據庫框架有兩個,ORMLite和GreenDao,我之前做的運動類的利用上,就需要存儲大量的運動數據,我們最開始是在本地寫數據庫的,那也是比較老的邏輯了,后來我們準備重構項目的時候,我決定把數據庫也重構1下,由于我們當時的利用讀取速度來還是比較慢的,比如你有1兩年的數據之類的,我后來就研究了1下這兩個框架,雖然我最后采取的是GreenDao,但是ORMLite也是研究了1會兒,所以,接下來,我將把這兩個框架分兩篇文章來分析,首先就是ORMLite了,網上還是有很多關于他們的文章的,所以我也是準備站在偉人的肩膀上,首先他們之間的優缺點,也有先輩寫了,你可以參考1下

  • SQLite數據庫框架ORMLite與GreenDao的簡單比較

而且鴻洋老師也寫了兩篇關于ORMLite的文章

  • Android ORMLite 框架的入門用法
  • Android 快速開發系列 ORMLite 框架最好實踐

但是就算他們寫了,我覺得我再根據自己的邏輯去講1遍,很多人還是會收益的,我自信我的文筆應當還是算不錯的,而且我是基于Android studio來說的。嘻嘻,話不多說,我們來新建1個項目:

這里寫圖片描述

1.準備工作

在之前,我們寫數據庫時怎樣寫的?那就是頻繁的去寫SQLiteOpenHelper了,所以后來在我們開發中,很多人就喜歡封裝他們,提高性能,也就出現了很多的數據庫框架,ORMLite算是1個佼佼者了

  • 官網:http://ormlite.com/
  • jar下載:http://ormlite.com/releases/

我們根據官方文檔來看這個框架是怎樣樣集成的,官網上有共有4個步驟

  • http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_1.html#Getting-Started

這里寫圖片描述

知道他需要兩個jar,1個android的,1個core的可以直接去下載

這里寫圖片描述

然后添加到libs目錄下,然后右鍵——Add As Library就算是添加成功了,緊接著,我們在xml中寫個按鈕用來創建表和保存數據

<Button android:id="@+id/btn_create_save" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="創建表 | 保存數據" />

2.Bean類

OK,我們繼續看文檔,他需要編寫1個bean類來聲明1些表明和字段的

這里寫圖片描述

既然如此,那我們就創建好了,這個類可不簡單,它主要通過注解去注明表單信息,然后映照給全部數據庫,我們看

package com.lgl.ormlite; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; /** * bean類,對應的全部數據庫的表單信息,幫助我們映照到全部數據庫當中 * Created by LGL on 2016/6/26. */ //配置表名 @DatabaseTable(tableName = "user_info") public class User { //配置主鍵 id @DatabaseField(generatedId = true) private int id; //名稱 @DatabaseField(columnName = "name") private String name; //描寫 @DatabaseField(columnName = "desc") private String desc; //空構造 public User(){ } //構造方法 public User(int id, String name, String desc) { this.id = id; this.name = name; this.desc = desc; } 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 getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } }

寫起來還是邏輯性很強的,如果需要1些特別的參數的話,可以參考1下官網上的項目描寫,首先在User類上添加@DatabaseTable(tableName = “user_info”),標明這是數據庫中的1張表名字為user_info,然后分別在屬性上添加@DatabaseField(columnName = “name”) ,columnName的值為該字段在數據中的列名,@DatabaseField(generatedId = true) ,generatedId 表示id為主鍵且自動生成,好了,到這里,我們繼續看官方的文檔了

3.Dao類

官網寫的很詳細呀,我們隨著造輪子既可呀,嘿嘿,那我們就來寫這個Dao類吧,注意,注釋寫的很清楚了哦!

這里寫圖片描述

package com.lgl.ormlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; /** * Dao類 * Created by LGL on 2016/6/26. */ public class DataBaseHelper extends OrmLiteSqliteOpenHelper { //創建數據庫名稱 private static final String DATABASE_NAME = "ormlite_sql.db"; //版本號 private static final int DATABASE_VERSION = 1; //寄存Dao private Map<String, Dao> maps = new HashMap<>(); //單例模式 private static DataBaseHelper instance; public static synchronized DataBaseHelper getInstance(Context context) { if (instance == null) { synchronized (DataBaseHelper.class) { if (instance == null) { instance = new DataBaseHelper(context); } } } return instance; } /** * 取得數據庫的訪問對象 * * @param cls * @return * @throws SQLException */ public synchronized Dao getDao(Class cls) throws SQLException { Dao dao = null; //通過反射取得類的名稱 String clsName = cls.getSimpleName(); //是不是存在該對象 if (maps.containsKey(clsName)) { dao = maps.get(clsName); } else { dao = super.getDao(cls); maps.put(clsName, dao); } return dao; } /** * 關閉所有操作 */ public void close() { super.close(); //獲得所有的map鍵值對置空 for (String key : maps.keySet()) { Dao dao = maps.get(key); dao = null; } } //構造方法 public DataBaseHelper(Context context) { //上下文,數據庫名,null,版本號 super(context, DATABASE_NAME, null, DATABASE_VERSION); } //創建數據庫 @Override public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { try { //對數據庫的創建和表的建立 TableUtils.clearTable(connectionSource, User.class); } catch (SQLException e) { e.printStackTrace(); } } //更新數據庫 @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) { try { //調用更新就刪除數據庫 TableUtils.dropTable(connectionSource, User.class, true); } catch (SQLException e) { e.printStackTrace(); } } }

到這里,我們的前期都OK了,緊接著,我們就能夠去操作這些數據了

4.UserDao類

這個類主要是對數據的初始化和操作的

package com.lgl.ormlite; import android.content.Context; import com.j256.ormlite.dao.Dao; import java.sql.SQLException; /** * 數據庫操作類 * Created by LGL on 2016/6/26. */ public class UserDao { //上下文 private Context mContext; //主鍵查詢 private Dao<User,Integer>userDao; //Dao類 private DataBaseHelper helper; public UserDao(Context mContext) { this.mContext = mContext; //創建數據庫 helper = DataBaseHelper.getInstance(mContext); try { //操作Dao userDao = helper.getDao(User.class); } catch (SQLException e) { e.printStackTrace(); } } public void addUser(User user){ try { userDao.create(user); } catch (SQLException e) { e.printStackTrace(); } } }

5.增

OK,基本上現在可以去實際的操作了,這個UserDao類我們等下還需要去完善,現在先這樣,我們去實現按鈕的點擊事件

//點擊事件 @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_create_save: userDao = new UserDao(this); User user = new User(); user.setName("lgl"); user.setDesc("Android"); userDao.addUser(user); break; } }

到這里,我們就能夠去操作了,我們去看數據庫,打開DDMS

這里寫圖片描述

固然,你也能夠打開看看

這里寫圖片描述

既然插入成功了,那我們嘗試1下多條語句的插入吧

case R.id.btn_create_save: User user = new User(); user.setName("lgl"); user.setDesc("Android"); userDao.addUser(user); User user1 = new User(); user.setName("zhangsan"); user.setDesc("IOS"); userDao.addUser(user1); User user2 = new User(); user.setName("lisi"); user.setDesc("python"); userDao.addUser(user2); break;

OK,運行1下

這里寫圖片描述

6.改

我們繼續操作UserDao這個類

//更新User public void updateUser(User user) { try { userDao.update(user); } catch (SQLException e) { e.printStackTrace(); } }

既然可以更新,那我們寫個按鈕

<Button android:id="@+id/btn_update" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="修改數據" />

寫完以后,我們就能夠履行了

case R.id.btn_update: //我們可以修改id為1的這個數據 User user3 = new User(); user3.setId(1); user3.setName("lgl帥哥"); userDao.updateUser(user3); break;

我們可以看下結果

這里寫圖片描述

OK,這就是我們的改了,我們可以封裝1下

/** * 根據ID來更新 * @param user * @param id */ public void updateById(User user,Integer id){ try { userDao.updateId(user,id); } catch (SQLException e) { e.printStackTrace(); } }

還有1個修改方法

/** * 修改數據,支持多條 * * @param user */ public void updateUserByBuilder(User user) { try { UpdateBuilder builder = userDao.updateBuilder(); builder.updateColumnValue("name", user.getName()).where().eq("id", 1); builder.update(); } catch (SQLException e) { e.printStackTrace(); } }

7.刪除

刪除我們可以根據條件刪除,就直接貼代碼了

/** * 刪除 * * @param user */ public void deleteUser(User user) { //刪除的方法比較多,根據的條件也比較多 try { userDao.delete(user); } catch (SQLException e) { e.printStackTrace(); } } /** * 多個對象的刪除操作 * * @param users */ public void deleteMulUser(List<User> users) { try { userDao.delete(users); } catch (SQLException e) { e.printStackTrace(); } } /** * 根據ID刪除 * * @param ids */ public void deleteUserById(List<Integer> ids) { try { userDao.deleteIds(ids); } catch (SQLException e) { e.printStackTrace(); } }

你要刪除直接調用就行了

8.查

查算是比較多的場景了,我們也能夠多條件查詢,看我們全部查詢的例子

/** * 全部查詢 * * @return */ public List<User> listAll() { try { return userDao.queryForAll(); } catch (SQLException e) { e.printStackTrace(); } return null; }

但是我們1般也不會用到全部查詢,條件查詢才是必須的,所以我們再新建1個按鈕

<Button android:id="@+id/btn_query" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="查詢數據" />

OK.我們就能夠查詢了,我們寫個單表查詢

/** * 查詢單張表 * * @return */ public List<User> queryBuilder() { List<User> list = null; //查詢器 QueryBuilder<User, Integer> queryBuilder = userDao.queryBuilder(); //聲明where條件 Where<User, Integer> where = queryBuilder.where(); //查詢sesc字段的name是哪一個值 try { where.eq("name", "lgl"); where.and(); where.eq("desc", "Android"); where.prepare(); list = queryBuilder.query(); //select * from user_info where name = 'lgl' and desc = 'Android' } catch (SQLException e) { e.printStackTrace(); } return list; }

注意在點擊事件里

case R.id.btn_query: List<User> list = userDao.queryBuilder(); Log.i(TAG, list.toString()); break;

好的,我們現在看Log

這里寫圖片描述

我們多條件查詢

/** * 多條件查詢 * * @return */ public List<User> queryBuilders() { List<User> list = null; QueryBuilder<User, Integer> queryBuilder = userDao.queryBuilder(); Where<User, Integer> where = queryBuilder.where(); try { where.or(where.and(where.eq("", ""), where.eq("", "")), where.and(where.eq("", ""), where.ge("", ""))).query(); } catch (SQLException e) { e.printStackTrace(); } return list; }

這里我們就不演示了

最后,只能說,ORMLite是比較強大的,我們如果真的要去理解他的話,還是得去看他的API文檔,不然真的無從下手,我這篇博文也只是希望大家能對ORMLite有個大概的了解,不敢妄自說精通,好的,本篇博客到這里也就結束了,如果大家覺得還不錯的話,無妨點個贊!

Demo下載:http://download.csdn.net/detail/qq_26787115/9562367

歡迎加群:555974449

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产高清1024永久免费 | 樱花aⅴ一区二区三区四区 影视精品网站入口 | 中文字幕在线网 | 波多野结衣一区2区3区 | 免费成年人在线观看视频 | 欧美午夜网 | 国产精品视频福利 | 中文字幕欧美日韩久久 | 亚州精品永久观看视频 | 日韩欧美中文 | 国产日韩不卡免费精品视频 | 亚洲亚洲人成网站在线观看 | 加勒比一道本综合 | 青青草原国产在线视频 | 亚洲人成网址在线观看 | 日本成人一区二区三区 | 中文字幕一二三区乱码老 | 美女毛片网站 | 日本免费一区二区三区最新vr | 免费在线视频一区 | 在线观看视频免费入口 | 亚洲制服欧美自拍另类 | 成年人精品视频 | 亚洲欧洲日产国码二区首页 | 欧美一级毛片免费大片 | 久久大香伊焦在人线免费 | 女人大毛片一级毛片一 | 国产亚洲欧美日韩俺去了 | 国产一区二区三区免费看 | 三级中文字幕永久在线视频 | 日本午夜理伦三级在线观看 | 激情一区二区三区 | 毛色毛片免费看 | 国产美女主播一级成人毛片 | 国产成人a一在线观看 | 日本v视频 | 性xxxx欧美| 免费人成激情视频在线观看冫 | 欧美性视频在线播放 | 欧美成人精品不卡视频在线观看 | 亚洲欧美一 |