package com.example.nanchen.realmdemo;
import android.content.Context;
import java.sql.SQLException;
import java.util.List;
import io.realm.Realm;
import io.realm.RealmModel;
import io.realm.RealmObject;
import io.realm.RealmResults;
import io.realm.Sort;
/**
* Author:Bruce
* time:2017/8/25.
* contact:weileng143@163.com
*
* @description
*/
public class BaseRealmDao<T extends RealmModel> implements BaseDaoAble {
/**
* 一些有用的方法
* between(), greaterThan(), lessThan(), greaterThanOrEqualTo() & lessThanOrEqualTo()
* equalTo() & notEqualTo()
* contains(), beginsWith() & endsWith()
* isNull() & isNotNull()
* isEmpty() & isNotEmpty()
* sum,min,max,average只支持整型数据字段
* userList.deleteFirstFromRealm(); //删除user表的第一条数据
* userList.deleteLastFromRealm();//删除user表的最后一条数据
* results.deleteAllFromRealm();//删除user表的全部数据
* 参考
* 链接:http://www.jianshu.com/p/37af717761cc
* http://blog.csdn.net/sealong_/article/details/54613481
*/
private Context context;
private Realm mRealm;
public BaseRealmDao(Context context) {
mRealm = RealmUtils.getInstance(context).getRealm();
}
/**
* 同步插入
*
* @param rm 需要插入的用户对象
* @throws SQLException
*/
@Override
public void insert(RealmModel rm) throws SQLException {
mRealm.beginTransaction();//必须先开启事务
mRealm.copyToRealm(rm);//把User对象复制到Realm
mRealm.commitTransaction();//提交事务
}
/**
* 返回所有的User对象,并按照名字首字母排序
*
* @return User对象表
* @throws SQLException
*/
@Override
public List<T> getAllUser(RealmModel rm) throws SQLException {
List<T> list = null;
RealmResults<RealmModel> results = (RealmResults<RealmModel>) mRealm.where(rm.getClass()).findAll();
// //增序排列
// dogs=dogs.sort("id");
// //降序排列
// dogs=dogs.sort("id", Sort.DESCENDING);
results.sort("name", Sort.DESCENDING);//针对字符串的排序,但目前并不是支持所有字符集
list = (List<T>) results;
// mRealm.close();
return list;
}
/**
* 查询平均年龄
*
* @param
* @return
* @throws SQLException
*/
@Override
public int selectAllAverage(RealmModel rm) throws SQLException {
RealmResults<RealmModel> results = (RealmResults<RealmModel>) mRealm.where(rm.getClass()).findAll();
//查询平均年龄 average // 查询总年龄sum //最大年龄 max
double age = results.average("age");//.sum //.max
return (int) age;
}
/**
* 查询总年龄
*
* @param
* @return
* @throws SQLException
*/
public int selectSumAverage(RealmModel rm) throws SQLException {
RealmResults<RealmModel> results = (RealmResults<RealmModel>) mRealm.where(rm.getClass()).findAll();
//查询平均年龄 average // 查询总年龄sum //最大年龄 max
Number age = results.sum("age");//.sum //.max
int sumAge = age.intValue();
return sumAge;
}
/**
* 查询最大年龄
*
* @param rm
* @return
* @throws SQLException
*/
@Override
public int selectMaxAverage(RealmModel rm) throws SQLException {
RealmResults<RealmModel> results = (RealmResults<RealmModel>) mRealm.where(rm.getClass()).findAll();
//查询平均年龄 average // 查询总年龄sum //最大年龄 max
Number age = results.max("age");//.sum //.max
int sumAge = age.intValue();
return sumAge;
}
/**
* 更新一个User对象
*
* @param rm 需要更新的用户类
* @return 返回更新后的User
* @throws SQLException
*/
@Override
public RealmModel updateUser(RealmModel rm) throws SQLException {
mRealm.beginTransaction();//开启事务
RealmModel user1 = mRealm.copyToRealmOrUpdate(rm);
mRealm.commitTransaction();//提交事务
// mRealm.close();//必须关闭事务
return user1;
}
/**
* 更新某个字段,返回对象,这里事务结束只暂时在逻辑代码上处理了
* @param user
* @param name1 老名字
* @return
* @throws SQLException
*/
@Override
public RealmModel updateUser(RealmModel user, String name1) throws SQLException {
mRealm.beginTransaction();//开启事务
RealmModel results = (RealmModel) mRealm.where(user.getClass())
.equalTo("name", name1)//查询出name为name1的User对象
.findFirst();
// .setName(name2);//修改查询出的第一个对象的名字;
// mRealm.where(user)
// .equalTo("name",name1)//查询出name为name1的User对象
// .findFirst()
// .setName(name2);//修改查询出的第一个对象的名字
// mRealm.commitTransaction();
// mRealm.close();
return results;
}
/*
* 根据id删除一个User
* @param id 用户主键
* @throws SQLException
*/
@Override
public void deleteUser(RealmObject rm, int id) throws SQLException {
RealmObject user = mRealm.where(rm.getClass()).equalTo("id", id).findFirst();//删除id列值为id的行
mRealm.beginTransaction();
user.deleteFromRealm();//从数据库删除
mRealm.commitTransaction();
// mRealm.close();
}
/**
* 返回第一个指定名字或者年龄的对象
* @param name1 名字
* @param age1 年龄
*/
@Override
public T findByNameOrAge(RealmModel rm, String name1, int age1) throws SQLException {
T user = (T) mRealm.where(rm.getClass())
.equalTo("name", name1)//相当于where name = name1
.or()//或,连接查询条件,没有这个方式时会默认是&连接
.equalTo("age", age1)//相当于where age = age1
.findFirst();
//整体相当于select * from (表名) where name = (传入的name) or age = (传入的age)limit 1;
// mRealm.close();
return user;
}
//===================================================异步方式=====================//
/**
* 异步插入User
*
* @param
* @throws SQLException
*/
@Override
public void insertUserAsync(final RealmModel rm) throws SQLException {
//一个Realm只能在同一个线程访问,在子线程中进行数据库操作必须重新获取realm对象
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.beginTransaction();//开启事务
realm.copyToRealm(rm);
realm.commitTransaction();
realm.close();//记得关闭事务
}
});
// mRealm.executeTransactionAsync(new Transaction() {
// @Override
// public void execute(Realm realm) {
// realm.copyToRealm(user);
// }
// }, new Transaction.OnSuccess() {
// @Override
// public void onSuccess() {
// ToastUtil.showShortToast(mContext,"收藏成功");
// }
// }, new Transaction.OnError() {
// @Override
// public void onError(Throwable error) {
// ToastUtil.showShortToast(mContext,"收藏失败");
// }
// });
// mRealm.close();//外面也不能忘记关闭事务
}
/**
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
RealmDemo-master.rar (65个子文件)
RealmDemo-master
RealmDemo-master
RealmDemo
gradlew.bat 2KB
gradlew 5KB
RealmDemo.iml 863B
gradle.properties 855B
.gradle
3.3
taskArtifacts
fileHashes.bin 131KB
taskArtifacts.bin 123KB
fileSnapshots.bin 1.95MB
taskArtifacts.lock 17B
app
proguard-rules.pro 673B
src
test
java
com
example
nanchen
realmdemo
ExampleUnitTest.java 322B
androidTest
java
com
example
nanchen
realmdemo
ApplicationTest.java 360B
main
res
mipmap-xxxhdpi
ic_launcher.png 10KB
mipmap-hdpi
ic_launcher.png 3KB
values
colors.xml 208B
strings.xml 72B
styles.xml 383B
dimens.xml 211B
mipmap-xxhdpi
ic_launcher.png 8KB
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xhdpi
ic_launcher.png 5KB
layout
activity_main.xml 712B
values-w820dp
dimens.xml 358B
java
com
example
nanchen
realmdemo
BaseDaoAble.java 3KB
User.java 3KB
BaseRealmDao1.java 7KB
CustomMigration.java 3KB
MainActivity.java 3KB
IOperateType.java 1KB
Test.java 871B
RealmUtils.java 1KB
BaseRealmDao.java 12KB
AndroidManifest.xml 673B
app.iml 9KB
.gitignore 7B
build.gradle 745B
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 230B
.idea
gradle.xml 750B
runConfigurations.xml 564B
misc.xml 3KB
.name 9B
copyright
profiles_settings.xml 74B
modules.xml 355B
encodings.xml 159B
compiler.xml 686B
workspace.xml 191KB
libraries
support_vector_drawable_24_0_0.xml 621B
realm_android_library_1_1_0.xml 623B
support_annotations_24_0_0.xml 541B
support_v4_24_0_0.xml 728B
appcompat_v7_24_0_0.xml 588B
relinker_1_2_1.xml 600B
realm_annotations_1_1_0.xml 347B
hamcrest_core_1_3.xml 526B
animated_vector_drawable_24_0_0.xml 624B
junit_4_12.xml 477B
android_android_24.xml 264B
inspectionProfiles
Project_Default.xml 1KB
profiles_settings.xml 235B
.gitignore 97B
local.properties 554B
settings.gradle 15B
build.gradle 553B
.gitignore 649B
.gitattributes 378B
共 65 条
- 1
资源评论
- mychanges82018-08-17不错,封装的没毛病
Wei_Leng
- 粉丝: 1105
- 资源: 45
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功