Android中最常用的数据库框架有ORMLite和GreenDao,ORMLite相比GreenDao来说更加轻量,并且学习成本也较低。由于ORMLite是基于反射机制工作的,所以相比GreenDao来说效率较低。

在module的build.gradle中添加依赖:

    compile 'com.j256.ormlite:ormlite-android:5.0'compile 'com.j256.ormlite:ormlite-core:5.0'

创建数据库
创建数据库需要借助一个类似原生SQLite数据库的DatabaseHelper的类,ORMLite要求我们必须继承OrmLiteSqliteOpenHelper,代码如下:

/*** 数据库操作管理工具类* <p>* 我们需要自定义一个类继承自ORMlite给我们提供的OrmLiteSqliteOpenHelper,创建一个构造方法,重写两个方法onCreate()和onUpgrade()* 在onCreate()方法中使用TableUtils类中的createTable()方法初始化数据表* 在onUpgrade()方法中我们可以先删除所有表,然后调用onCreate()方法中的代码重新创建表* <p>* 我们需要对这个类进行单例,保证整个APP中只有一个SQLite Connection对象* <p>* 这个类通过一个Map集合来管理APP中所有的DAO,只有当第一次调用这个DAO类时才会创建这个对象(并存入Map集合中)* 其他时候都是直接根据实体类的路径从Map集合中取出DAO对象直接调用*/
public class DataOpenHelper extends OrmLiteSqliteOpenHelper {// 数据库名称public static final String DATABASE_NAME = "mydb.db";// 本类的单例实例private static DataOpenHelper instance;// 存储APP中所有的DAO对象的Map集合private Map<String, Dao> daos = new HashMap<>();// 获取本类单例对象的方法public static synchronized DataOpenHelper getInstance(Context context) {if (instance == null) {synchronized (DataOpenHelper.class) {if (instance == null) {instance = new DataOpenHelper(context);}}}return instance;}// 私有的构造方法private DataOpenHelper(Context context) {super(context, DATABASE_NAME, null, 1);}// 根据传入的DAO的路径获取到这个DAO的单例对象(要么从daos这个Map中获取,要么新创建一个并存入daos)public synchronized Dao getDao(Class clazz) throws SQLException {Dao dao = null;String className = clazz.getSimpleName();if (daos.containsKey(className)) {dao = daos.get(className);}if (dao == null) {dao = super.getDao(clazz);daos.put(className, dao);}return dao;}@Override // 创建数据库时调用的方法public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {try {TableUtils.createTable(connectionSource, UserBean.class);TableUtils.createTable(connectionSource, ArticleBean.class);} catch (SQLException e) {e.printStackTrace();}}@Override // 数据库版本更新时调用的方法public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {try {TableUtils.dropTable(connectionSource, UserBean.class, true);TableUtils.dropTable(connectionSource, ArticleBean.class, true);onCreate(database, connectionSource);} catch (SQLException e) {e.printStackTrace();}}// 释放资源@Overridepublic void close() {super.close();for (String key : daos.keySet()) {Dao dao = daos.get(key);dao = null;}}
}

创建数据实体类:

/*** UserBean实体类,存储数据库中user表中的数据* <p>* 注解:* DatabaseTable:通过其中的tableName属性指定数据库名称* DatabaseField:代表数据表中的一个字段* ForeignCollectionField:一对多关联,表示一个UserBean关联着多个ArticleBean(必须使用ForeignCollection集合)* <p>* 属性:* id:当前字段是不是id字段(一个实体类中只能设置一个id字段)* columnName:表示当前属性在表中代表哪个字段* generatedId:设置属性值在数据表中的数据是否自增* useGetSet:是否使用Getter/Setter方法来访问这个字段* canBeNull:字段是否可以为空,默认值是true* unique:是否唯一* defaultValue:设置这个字段的默认值*/
@DatabaseTable(tableName = "user") // 指定数据表的名称
public class UserBean {// 定义字段在数据库中的字段名public static final String COLUMNNAME_ID = "id";public static final String COLUMNNAME_NAME = "name";public static final String COLUMNNAME_SEX = "sex";public static final String COLUMNNAME_BIRTHDAY = "birthday";public static final String COLUMNNAME_ADDRESS = "address";@DatabaseField(generatedId = true, columnName = COLUMNNAME_ID, useGetSet = true)private int id;@DatabaseField(columnName = COLUMNNAME_NAME, useGetSet = true, canBeNull = false, unique = true)private String name;@DatabaseField(columnName = COLUMNNAME_SEX, useGetSet = true, defaultValue = "1")private char sex;@DatabaseField(columnName = COLUMNNAME_BIRTHDAY, useGetSet = true)private Date birthday;@DatabaseField(columnName = COLUMNNAME_ADDRESS, useGetSet = true)private String address;@ForeignCollectionField(eager = true)private ForeignCollection<ArticleBean> articles;public UserBean() {}public UserBean(String name, char sex, Date birthday, String address) {this.name = name;this.sex = sex;this.birthday = birthday;this.address = address;}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 char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public ForeignCollection<ArticleBean> getArticles() {return articles;}public void setArticles(ForeignCollection<ArticleBean> articles) {this.articles = articles;}@Overridepublic String toString() {return "UserBean{" +"id=" + id +", name='" + name + '\'' +", sex=" + sex +", birthday=" + birthday +", address='" + address + '\'' +", articles=" + articles +'}';}
}

创建UserDao

/*** 操作User数据表的Dao类,封装这操作User表的所有操作* 通过DataOpenHelper类中的方法获取ORMLite内置的DAO类进行数据库中数据的操作* <p>* 调用dao的create()方法向表中添加数据* 调用dao的delete()方法删除表中的数据* 调用dao的update()方法修改表中的数据* 调用dao的queryForAll()方法查询表中的所有数据*/
public class UserDao {private Context context;// ORMLite提供的DAO类对象,第一个泛型是要操作的数据表映射成的实体类;第二个泛型是这个实体类中ID的数据类型private Dao<UserBean, Integer> dao;public UserDao(Context context) {this.context = context;try {this.dao = DataOpenHelper.getInstance(context).getDao(UserBean.class);} catch (SQLException e) {e.printStackTrace();}}// 向user表中添加一条数据public void insert(UserBean data) {try {dao.create(data);} catch (SQLException e) {e.printStackTrace();}}// 删除user表中的一条数据public void delete(UserBean data) {try {dao.delete(data);} catch (SQLException e) {e.printStackTrace();}}// 修改user表中的一条数据public void update(UserBean data) {try {dao.update(data);} catch (SQLException e) {e.printStackTrace();}}// 查询user表中的所有数据public List<UserBean> selectAll() {List<UserBean> users = null;try {users = dao.queryForAll();} catch (SQLException e) {e.printStackTrace();}return users;}// 根据ID取出用户信息public UserBean queryById(int id) {UserBean user = null;try {user = dao.queryForId(id);} catch (SQLException e) {e.printStackTrace();}return user;}
}

常用注解及其参数含义

@DatabaseTable(tableName = “user”),此处指创建了一个名为user的表;

@DatabaseField(columnName = “id”, generatedId = true),此处指创建了名为id的字段名,且是主键;

@DatabaseField(columnName = “name”),此处指创建了名为name的字段名;

id:当前字段是不是id字段(一个实体类中只能设置一个id字段)

columnName:表示当前属性在表中代表哪个字段

generatedId:设置属性值在数据表中的数据是否自增

useGetSet:是否使用Getter/Setter方法来访问这个字段

canBeNull:字段是否可以为空,默认值是true

unique:是否唯一

defaultValue:设置这个字段的默认值

foreignColumnName:外键约束指向的类中的属性名

foreign:当前字段是否是外键

foreignAutoRefresh:如果这个属性设置为true,在关联查询的时候就不需要再调用refresh()方法了

ORMLite的集成和使用相关推荐

  1. Android找工作系列之数据安全-ORMLite整合SQLCipher

    Android数据库加密,目前就是SQLCipher对SQLite整体加密,微信也是使用这种方式.开源,且支持很多平台. SQLCipher虽说开源了,但是编译好的jar和so文件,还是要收费的. 但 ...

  2. ORMLite整合SQLCipher

    Android数据库加密,目前就是SQLCipher对SQLite整体加密,微信也是使用这种方式.开源,且支持很多平台. SQLCipher虽说开源了,但是编译好的jar和so文件,还是要收费的. 但 ...

  3. Android数据库框架-----ORMLite 的基本用法

    ORMLite 是一款非要流行的Android平台上的数据库框架,性能优秀,代码简洁: 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面. 缺点:1.基于反射,效率较低(本 ...

  4. Android项目快速开发框架探索(Mysql + OrmLite + Hessian + Sqlite)

    前言 结合之前所用的ormlite和hessian,再加上SAE已经支持JAVA,把服务端切换到JAVA,也就有了本文.使用hessian来做数据传输,ormlite来实现客户端与服务端的数据存储,极 ...

  5. 安卓本地轻量级数据库操作框架 greenDao3.2.2 详细教程附带Demo①——集成环境,开辟难题。

    欢迎安卓本地轻量级数据库操作框架 greenDao3.2.2 学习之旅. 本套框架博客系列博客目录: 第一篇:认识 greenDao3.2.2 框架,集成环境,开辟难题. 第二篇:简单的进行 增.删. ...

  6. Nignx集成fastDFS后访问Nginx一直在加载中解决

    问题描述: Nginx集成fastDFS后,访问Nginx一直在加载中,得不到页面.查看Nginx的错误日志: 可以看到是fastdfs.conf的配置错误,tracker的ip没有修改: fastd ...

  7. Hexo集成Algolia实现搜索功能

    2年前搭建的hexo博客好久没有维护了,一看 hexo 以及先前使用 butterfly 主题已经更新好几个版本了,看介绍在速度性能上有了很大的提高,于是打算给 hexo 升个级,整理整理翻翻新.通过 ...

  8. 将TVM集成到PyTorch

    将TVM集成到PyTorch 随着TVM不断展示出对深度学习执行效率的改进,很明显PyTorch将从直接利用编译器堆栈中受益.PyTorch的主要宗旨是提供无缝且强大的集成,而这不会妨碍用户.PyTo ...

  9. 将TVM集成到PyTorch上

    将TVM集成到PyTorch上 随着TVM不断展示出对深度学习执行效率的改进,很明显PyTorch将从直接利用编译器堆栈中受益.PyTorch的主要宗旨是提供无缝且强大的集成,而这不会妨碍用户.为此, ...

最新文章

  1. MySQL自带工具使用介绍
  2. Python descriptor
  3. centos7安装Oracle12(完整版)
  4. java enumerator_简单介绍java Enumeration
  5. TikTok广告投放指南(基础入门)
  6. 内核功能导致重启_诊断修复 TiDB Operator 在 K8s 测试中遇到的 Linux 内核问题
  7. 【转】ABAP BASE64编码与解码练习
  8. Redis如何淘汰过期的keys
  9. c语言清空输入缓冲区函数,c语言:C语言清空输入缓冲区在标准输入(stdin)情况 -电脑资料...
  10. ppc linux 性能,用profile和oprofile监视视linux性能!
  11. php oauth2 和 jwt,jwt-auth: thinkphp 的 jwt (JSON Web Token)身份验证扩展包,支持Swoole...
  12. android7.x版本编译framework.jar无效解决
  13. 你真的会用Context么?
  14. SpringClould之应用层鉴权Oauth2
  15. 软件测试书单/书籍推荐(整理更新中)
  16. 玩转SpringCloud(F版本) 四.路由网关(zuul)
  17. html+css制作月亮
  18. 【微信公众号】怎么办理信息系统安全等级保护备案证明?
  19. 3D MAX界面操作教程及渲染技巧
  20. 官宣,Google DeepMind 成立

热门文章

  1. 高分辨率遥感卫星影像在交通方面的应用及高分二号影像获取
  2. 关于树莓派魔镜应用的一点记录
  3. 金蝶eas税率更新为16%相关功能点
  4. python樱花手绘_宫崎骏动画里的新垣结衣见过没?这个开源动漫生成器让你的照片秒变手绘日漫...
  5. 人教版初中信息技术电子课本_电子课本|2020秋 部编人教版初中化学九年级上册教材电子课本(高清更新可打印)...
  6. 常用分词算法总结(字典、统计、神经网络)
  7. 《精解Windows8》——2.12 个性化Metro界面
  8. Tomcat安装与使用
  9. 手把手教你开发galgame 游戏(galgame 游戏引擎开发入门经典教程)
  10. webmatrix(WebMatrix升级)