Android App在持久保存数据时,会使用的数据库,一般用到默认的SQlite,但是在保存操作数据时并不是很方便,所以使用ORMLite操作数据库,不失为一种很好的选择。ORM即Object Relative Mapping,可以直接将对象保存到数据库中,非常方便。下面分享下自己学习的经验所得。本demo做了一个简单的会话页面,将每次的会话内容保存到数据库,再次打开该会话页面时,默认加载之前的会话。
Demo效果如下:
表内容如下:
一、包含所需的开源库,在gradle文件中添加
compile 'com.j256.ormlite:ormlite-android:4.48'
compile 'com.j256.ormlite:ormlite-core:4.48'二、定义一个操作对象MsgModel,用于保存消息内容
/**
* Date: 2016/5/11 17:48
*
* @author hornsey
*/
@DatabaseTable
public class MsgModel {
private static int count = 0;
private Random random = new Random();
private String[] names = {"Mike", "Jack"};
@DatabaseField(id = true)
private int msgId;
@DatabaseField
private int userId;
@DatabaseField
private String nickName;
@DatabaseField
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getMsgId() {
return msgId;
}
public void setMsgId(int msgId) {
this.msgId = msgId;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public MsgModel() {}
public static void setBaseCount(int base) {
MsgModel.count = base;
}
public MsgModel(String msg) {
int i = random.nextInt(2);
this.msgId = count++;
this.userId = i;
this.nickName = names[i];
this.msg = msg;
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("MsgModel{");
sb.append("msg='").append(msg).append('\'');
sb.append(", msgId=").append(msgId);
sb.append(", userId=").append(userId);
sb.append(", nickName='").append(nickName).append('\'');
sb.append('}');
return sb.toString();
}
}
代码中使用了简单的注解,字母意思清晰易懂。特别注意:在改对象中,必须指明一个域作为数据库的主key。本demo中使用的是msgId。
三、创建DataHelper,继承自OrmLiteSqliteOpenHelper
public class ORMLiteDemoApplication extends Application {
private static final String TAG = "ORMLiteDemoApplication";
private static ORMLiteDemoApplication instance;
private static DataHelper dataHelper;
public static ORMLiteDemoApplication getInstance() {
if(instance == null) {
synchronized (ORMLiteDemoApplication.class) {
if(instance == null) {
instance = new ORMLiteDemoApplication();
}
}
}
return instance;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onTerminate() {
destroyDataHelper();
super.onTerminate();
}
public static synchronized DataHelper getDataHelper(Context c) {
if (dataHelper == null) {
dataHelper = OpenHelperManager.getHelper(c, DataHelper.class);
}
return dataHelper;
}
public static void destroyDataHelper() {
if (null != dataHelper) {
OpenHelperManager.releaseHelper();
dataHelper = null;
Log.d(TAG, "destroyDataHelper.dataHelper = " + dataHelper);
}
}
}四、在Application中定义一个DataHelper静态实例
public class ORMLiteDemoApplication extends Application {
private static final String TAG = "ORMLiteDemoApplication";
private static ORMLiteDemoApplication instance;
private static DataHelper dataHelper;
public static ORMLiteDemoApplication getInstance() {
if(instance == null) {
synchronized (ORMLiteDemoApplication.class) {
if(instance == null) {
instance = new ORMLiteDemoApplication();
}
}
}
return instance;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onTerminate() {
destroyDataHelper();
super.onTerminate();
}
public static synchronized DataHelper getDataHelper(Context c) {
if (dataHelper == null) {
dataHelper = OpenHelperManager.getHelper(c, DataHelper.class);
}
return dataHelper;
}
public static void destroyDataHelper() {
if (null != dataHelper) {
OpenHelperManager.releaseHelper();
dataHelper = null;
Log.d(TAG, "destroyDataHelper.dataHelper = " + dataHelper);
}
}
}五、在会话页面操作数据库,查询数据或者写入数据
private void writeNewMsgToDB(MsgModel msgModel) {
DataHelper dataHelper = ORMLiteDemoApplication.getDataHelper(context);
try {
dataHelper.getChatDao().createOrUpdate(msgModel);
} catch (SQLException e) {
e.printStackTrace();
}
}
//获取本地历史消息
private void getHistoryMsg() {
List<MsgModel> localList = null;
try {
localList = ORMLiteDemoApplication.getDataHelper(context).getChatDao().queryForAll();
} catch (SQLException e) {
e.printStackTrace();
}
Log.d(TAG, "getHistoryMsg.localList = " + localList);
if(localList != null) {
msgAdapter.addMsgList(localList);
msgList.smoothScrollToPosition(msgAdapter.getCount()-1);
MsgModel.setBaseCount(localList.size());
}
}
本文介绍了在Android中使用ORMLite库进行数据库操作的方法,以提高数据保存的便利性。通过ORM技术,可以将对象直接保存到SQLite数据库,简化了数据库交互。示例中演示了一个会话记录应用,详细阐述了如何配置ORMLite库,定义数据模型,并创建DataHelper类进行数据库操作。
468

被折叠的 条评论
为什么被折叠?



