前言
此demo是使用ormlite操作android数据库,采用sqlcipher进行加密。
先看效果图,对数据进行了增删改查
jar包下载
ormlite包下载地址:http://ormlite.com/releases/
ormlite-android-sqlcipher.jar和sqlcipher.jar下载地址:https://download.csdn.net/download/chensenli/10766390
配置
导入依赖,在build.gradle中加入
implementation files('libs/ormlite-android-sqlcipher-4.48.jar')
implementation files('libs/ormlite-core-4.49.jar')
implementation files('libs/sqlcipher.jar')
so文件的引入,在build.gradle中加入
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
具体代码
- PersonModel实体类:存储Person表中的数据。get和set方法没有贴出来。
DatabaseTable:指定数据库表名称为Person
DatabaseField:数据库的字段
此实体类的两个字段name和hobby分别名字个兴趣
@DatabaseTable(tableName = "Person")
public class PersonModel implements Serializable {
public static final String NAME = "name";
public static final String HOBBY = "bobby";
@DatabaseField(generatedId = true)
private int id;
@DatabaseField(columnName = NAME)
private String name;
@DatabaseField(columnName = HOBBY)
private String hobby;
}
- 数据库管理类
public class MyHelper extends OrmLiteSqliteOpenHelper {
private static final String DATABASE_NAME = "person_database.db";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_PASSWORD = "123456";
private static MyHelper myHelper;
private static Dao<PersonModel,Integer> helperDao = null;
/**
* 初始化MyHelper
*/
public MyHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION,(InputStream) null,DATABASE_PASSWORD);
}
/**
* 单例模式,获取MyHelper对象
*/
public static synchronized MyHelper getHelper(Context context){
if(myHelper == null){
myHelper = new MyHelper(context);
}
return myHelper;
}
/**
* 创建数据库表
*/
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource,PersonModel.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 更新数据库表,先删除表,然后创建
*/
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {
try {
TableUtils.dropTable(connectionSource,PersonModel.class,true);
} catch (SQLException e) {
e.printStackTrace();
}
onCreate(sqLiteDatabase, connectionSource);
}
@Override
public void close() {
super.close();
setHelperDao(null);
}
public static void setHelperDao(Dao<PersonModel, Integer> helperDao) {
MyHelper.helperDao = helperDao;
}
/**
* 获取ormlite的DAO对象
* @return
*/
public Dao<PersonModel, Integer> getHelperDao(Class clazz) {
if(helperDao == null){
try {
helperDao = getDao(clazz);
} catch (SQLException e) {
e.printStackTrace();
}
}
return helperDao;
}
}
- PersonDao类:操作Person表中的数据
public class PersonDao {
private static PersonDao personDao;
private static MyHelper myHelper;
private static Dao<PersonModel,Integer> helperDao;
private Context context;
public PersonDao(){
context = App.getContext();
myHelper =MyHelper.getHelper(context);
helperDao = myHelper.getHelperDao(PersonModel.class);
}
public static synchronized PersonDao getPersonDao(){
if(personDao == null){
personDao = new PersonDao();
}
return personDao;
}
public void addPerson(PersonModel model){
try {
helperDao.create(model);
} catch (SQLException e) {
e.printStackTrace();
}
}
public List<PersonModel> findPersonByHobby(String hobby){
List<PersonModel> list = null;
QueryBuilder<PersonModel, Integer> qb = helperDao.queryBuilder();
try {
qb.where().eq(PersonModel.HOBBY,hobby);
list = qb.query();
} catch (SQLException e) {
e.printStackTrace();
}
if(list == null){
list = new ArrayList<>();
}
return list;
}
public List<PersonModel> findAllPerson(){
List<PersonModel> list = null;
QueryBuilder<PersonModel,Integer> qb = helperDao.queryBuilder();
try {
list = qb.query();
} catch (SQLException e) {
e.printStackTrace();
}
if(list == null){
list = new ArrayList<>();
}
return list;
}
public void deletePersonByHobby(String hobby){
List<PersonModel> personByHobby = personDao.findPersonByHobby(hobby);
try {
helperDao.delete(personByHobby);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void deletePerson(PersonModel model){
try {
helperDao.delete(model);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void updatePerson(PersonModel model){
try {
helperDao.update(model);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
- APP类:其中将sqlcipher所依赖的so库加载进来
public class App extends Application {
private static App app;
@Override
public void onCreate() {
super.onCreate();
app = this;
SQLiteDatabase.loadLibs(app);
}
public static Context getContext() {
return app;
}
}
最后写个测试Activity获取PersonDao.getPersonDao()对象调用不同的操作方法即可。
本博客代码链接:https://download.csdn.net/download/chensenli/10766521