OrmLite可以協助我們將會資料庫操作,不用自己去寫SQL語句,而且設定它跟使用Sqlite一樣的方式,它是一種關係型資料,我比較喜歡的就是它能夠協助我判斷資料表項是更新還是建立等操作,不需要自己去寫大量的SQL語句去判斷,下面介紹一下它的使用文檔以及一些基本的注意點:
官方網址:http://ormlite.com/
JavaDOC地址:http://ormlite.com/javadoc/ormlite-android/
開發文檔地址:http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite.html
一、建立模型
首先建立一個Model,作為一個資料表,在Android中我使用的是實現Parcelable,代碼如下:
package com.jwzhangjie.capricorntv.bean;import com.j256.ormlite.field.DatabaseField;import com.j256.ormlite.table.DatabaseTable;import android.os.Parcel;import android.os.Parcelable;/** * * @author zj 包含視頻的參數 視頻的名字 "channel_id":9, "channel_name":"湖南衛視", * "icon_url":"http://tv.togic.com:8080/ShowTimeService/images/182.png", * "province":"湖南", "mode":"SD", "url": * "http://live.gslb.letv.com/gslb?stream_id=hunan&tag=live&ext=m3u8&sign=live_tv&platid=10&splatid=1012&temporarykey=db7c39a0ee39ab2d4d2e781d5" * , * "second_url":["http://live-cdn.kksmg.com/channels/tvie/test/flv:500k" * , * "http://live.gslb.letv.com/gslb?stream_id=hunanHD_1800&tag=live&ext=m3u8&sign=live_tv&platid=10&splatid=1012&temporarykey=db7c39a0ee39ab2d4d2e781d5" * , * "http://pplive.shntv.cn/live/5/30/e9301e073cf94732a380b765c8b9573d.m3u8?type=ipad" * ,"rtsp://rlive.tv189.cn/live/112"], "types":"2|0" */public class LiveItemBean implements Parcelable {@Overridepublic int describeContents() {return 0;}public LiveItemBean() {}private LiveItemBean(Parcel source) {readFromParcel(source);}@DatabaseField(id = true)private int channel_id;@DatabaseFieldprivate String channel_name;@DatabaseFieldprivate String icon_url;@DatabaseFieldprivate String province;@DatabaseFieldprivate String mode;@DatabaseFieldprivate String url;@DatabaseFieldprivate String second_urls;private String[] second_url;@DatabaseFieldprivate String types;private void readFromParcel(Parcel source) {channel_name = source.readString();icon_url = source.readString();province = source.readString();mode = source.readString();url = source.readString();second_urls = source.readString();second_url = (String[]) source.readArray(LiveItemBean.class.getClassLoader());types = source.readString();}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeInt(channel_id);dest.writeString(channel_name);dest.writeString(icon_url);dest.writeString(province);dest.writeString(mode);dest.writeString(url);dest.writeString(second_urls);dest.writeArray(second_url);dest.writeString(types);}public static Creator CREATOR = new Creator() {@Overridepublic LiveItemBean createFromParcel(Parcel source) {return new LiveItemBean(source);}@Overridepublic LiveItemBean[] newArray(int size) {return new LiveItemBean[size];}};public int getChannel_id() {return channel_id;}public void setChannel_id(int channel_id) {this.channel_id = channel_id;}public String getChannel_name() {return channel_name;}public void setChannel_name(String channel_name) {this.channel_name = channel_name;}public String getIcon_url() {return icon_url;}public void setIcon_url(String icon_url) {this.icon_url = icon_url;}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getMode() {return mode;}public void setMode(String mode) {this.mode = mode;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getSecond_urls() {return second_urls;}public void setSecond_urls(String second_urls) {this.second_urls = second_urls;}public String[] getSecond_url() {return second_url;}public void setSecond_url(String[] second_url) {this.second_url = second_url;StringBuffer buffer = new StringBuffer();int count = second_url.length;for (int i = 0; i < count; i++) {buffer.append(second_url[i]);if (i != count-1) {buffer.append(";");}}second_urls = buffer.toString();}public String getTypes() {return types;}public void setTypes(String types) {this.types = types;}}
我們分析上面的代碼同時介紹一下與之相關的配置:
1、是類名,這裡我使用的資料表的名字是預設類的小寫,當然你還可以指定表名字,使用@DatabaseTable(tableName = "liveitembeans"),
2、主鍵,在上面的代碼中有一行@DatabaseField(id = true)被註解對象就是主鍵,當然我們有時候使用的一個自增長的id,我們可以設定為@DatabaseField(generatedId = true)來實現,當然還有很多其他的註解配置我這裡就不一一說明了,自己可以到官網可以查看找到自己需要的。
二、建立DBHelper
package com.jwzhangjie.capricorntv.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;import com.j256.ormlite.support.ConnectionSource;import com.j256.ormlite.table.TableUtils;import com.jwzhangjie.capricorntv.bean.LiveItemBean;public class DBHelper extends OrmLiteSqliteOpenHelper {private static final String DATABASE_NAME = "jwzhangjie.db";private static final int DATABASE_VERSION = 1;public DBHelper(Context context){super(context, DATABASE_NAME, null, DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase sqLiteDatabase,ConnectionSource connectionSource) {try {TableUtils.createTable(connectionSource, LiveItemBean.class);} catch (Exception e) {e.printStackTrace();}}@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase,ConnectionSource connectionSource, int oldVer, int newVer) {try {TableUtils.dropTable(connectionSource, LiveItemBean.class, true);onCreate(sqLiteDatabase, connectionSource);} catch (Exception e) {e.printStackTrace();}}}上面使用TableUtils來建立和刪除表,還有其他的功能例如清空表內容等
三、建立操作工具
接下來就是建立一個操作資料庫的工具DAO
package com.jwzhangjie.capricorntv.uitls;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import android.content.Context;import com.j256.ormlite.dao.Dao;import com.jwzhangjie.capricorntv.bean.LiveItemBean;import com.jwzhangjie.capricorntv.db.DBHelper;public class DBUtils {public static Dao liveDao = null;public DBUtils(Context context) {if (liveDao == null) {DBHelper dbHelper = new DBHelper(context);try {liveDao = dbHelper.getDao(LiveItemBean.class);} catch (SQLException e) {e.printStackTrace();}}}/** * 插入直播資料,如果資料存在則進行更新 * * @param liveItemBean */public void LiveCreate(LiveItemBean liveItemBean) {try {liveDao.createOrUpdate(liveItemBean);} catch (SQLException e) {e.printStackTrace();}}/** * 連續進行插入,如果存在則更新 */public void LiveCreates(List lists) {try {for (LiveItemBean liveItemBean : lists) {liveDao.createOrUpdate(liveItemBean);}} catch (Exception e) {e.printStackTrace();}}/** * 查詢所有的直播元素 * @return */public List getLiveItemBeans(){List listsBeans = new ArrayList();try {listsBeans = liveDao.queryForAll();} catch (SQLException e) {e.printStackTrace();}return listsBeans;}}
上面實現了建立和查詢,在上面的有一個連續插入多個資料,還可以使用OrmLite提供的批處理任務方法如下:
/** * 連續進行插入,如果存在則更新 */public void LiveCreates(final List lists) {try {liveDao.callBatchTasks(new Callable() {@Overridepublic Void call() throws Exception {for (LiveItemBean liveItemBean : lists) {liveDao.createOrUpdate(liveItemBean);}return null;}});} catch (Exception e) {e.printStackTrace();}}查詢除了用已有的介面,我們還可以使用sql語句來實現,比如:
// find out how many orders account-id #10 has GenericRawResults rawResults = orderDao.queryRaw( "select count(*) from orders where account_id = 10"); // there should be 1 result List results = rawResults.getResults(); // the results array should have 1 value String[] resultArray = results.get(0); // this should print the number of orders that have this account-id System.out.println("Account-id 10 has " + resultArray[0] + " orders");
四、最後釋放
當我們應用退出時候,我們需要釋放之前對象
OpenHelperManager.releaseHelper();dbHelper = null;