• 首先需要导入ORMLite的依赖:在build.gradle中加入以下代码:
 implementation 'com.j256.ormlite:ormlite-android:5.1'implementation 'com.j256.ormlite:ormlite-core:5.1'
  • 建立Bean类(以OneTableBean为例)
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;@DatabaseTable(tableName = "onetable")
public class OneTableBean {@DatabaseField(generatedId = true, columnName = "messageId", unique = true)private int messageId;//主键@DatabaseField(columnName = "batchNo")private String batchNo;//批次号码   3@DatabaseField(columnName = "title")private String title;//标题  zzzz@DatabaseField(columnName = "content")private String content;//内容   zzzpublic int getMessageId() {return messageId;}public void setMessageId(int messageId) {this.messageId = messageId;}public String getBatchNo() {return batchNo;}public void setBatchNo(String batchNo) {this.batchNo = batchNo;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}@Overridepublic String toString() {return "OneTableBean{" +"messageId=" + messageId +", batchNo='" + batchNo + '\'' +", title='" + title + '\'' +", content='" + content + '\'' +'}';}
}

数据库中字段注解设置说明:

  • 构建DatabaseHelper对DAO进行了统一的管理
import android.annotation.SuppressLint;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.ArrayMap;import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;import java.sql.SQLException;import cn.tsou.ormlite.bean.ArticleBean;
import cn.tsou.ormlite.bean.OneTableBean;
import cn.tsou.ormlite.bean.UserBean;/*** 数据库操作管理工具类* <p>* 我们需要自定义一个类继承自ORMlite给我们提供的OrmLiteSqliteOpenHelper,创建一个构造方法,重写两个方法onCreate()和onUpgrade()* 在onCreate()方法中使用TableUtils类中的createTable()方法初始化数据表* 在onUpgrade()方法中我们可以先删除所有表,然后调用onCreate()方法中的代码重新创建表* <p>* 我们需要对这个类进行单例,保证整个APP中只有一个SQLite Connection对象* <p>* 这个类通过一个Map集合来管理APP中所有的DAO,只有当第一次调用这个DAO类时才会创建这个对象(并存入Map集合中)* 其他时候都是直接根据实体类的路径从Map集合中取出DAO对象直接调用*/
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {// 数据库名称public static final String DATABASE_NAME = "mydb.db";// 本类的单例实例private static DatabaseHelper instance;// 存储APP中所有的DAO对象的Map集合@SuppressLint("NewApi")private ArrayMap<String, Dao> daos = new ArrayMap<>();// 获取本类单例对象的方法public static synchronized DatabaseHelper getInstance(Context context) {if (instance == null) {synchronized (DatabaseHelper.class) {if (instance == null) {instance = new DatabaseHelper(context);}}}return instance;}// 私有的构造方法private DatabaseHelper(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, OneTableBean.class);} catch (SQLException e) {e.printStackTrace();}}@Override // 数据库版本更新时调用的方法public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {try {TableUtils.dropTable(connectionSource, OneTableBean.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;}}
}

注:新表建立必须在onCreate创建

  • 构建Bean对应的dao
import android.content.Context;import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.QueryBuilder;import java.sql.SQLException;
import java.util.List;import cn.tsou.ormlite.bean.OneTableBean;
import cn.tsou.ormlite.manager.DatabaseHelper;/*** 操作OneTableBean数据表的Dao类,封装这操作OneTableBean表的所有操作* 通过DatabaseHelper类中的方法获取ORMLite内置的DAO类进行数据库中数据的操作* <p>* 调用dao的create()方法向表中添加数据* 调用dao的delete()方法删除表中的数据* 调用dao的update()方法修改表中的数据* 调用dao的queryForAll()方法查询表中的所有数据*/
public class OneTableDao {// ORMLite提供的DAO类对象,第一个泛型是要操作的数据表映射成的实体类;第二个泛型是这个实体类中ID的数据类型private Dao<OneTableBean, Integer> dao;public OneTableDao(Context context) {try {this.dao = DatabaseHelper.getInstance(context).getDao(OneTableBean.class);} catch (SQLException e) {e.printStackTrace();}}/*** 创建数据** @param data*/public void create(OneTableBean data) {try {dao.createOrUpdate(data);} catch (SQLException e) {e.printStackTrace();}}/*** 创建数据集合** @param datas*/public void createList(List<OneTableBean> datas) {try {dao.create(datas);} catch (SQLException e) {e.printStackTrace();}}/*** 向user表中添加一条数据* <p>* create:插入一条数据或集合* <p>* createIfNotExists:如果不存在则插入* <p>* createOrUpdate:如果指定id则更新** @param data*/public void insert(OneTableBean data) {try {dao.createIfNotExists(data);} catch (SQLException e) {e.printStackTrace();}}// 通过id删除指定数据public void delete(int id) {try {dao.deleteById(id);} catch (SQLException e) {}}// 删除表中的一条数据public void delete(OneTableBean data) {try {dao.delete(data);} catch (SQLException e) {e.printStackTrace();}}// 删除数据集合public void deleteList(List<OneTableBean> datas) {try {dao.delete(datas);} catch (SQLException e) {e.printStackTrace();}}//清空数据public void deleteAll() {try {dao.delete(dao.queryForAll());} catch (Exception e) {}}// 修改表中的一条数据public void update(OneTableBean data) {try {dao.update(data);} catch (SQLException e) {e.printStackTrace();}}// 查询表中的所有数据public List<OneTableBean> queryAll() {List<OneTableBean> users = null;try {users = dao.queryForAll();} catch (SQLException e) {e.printStackTrace();}return users;}// 根据ID取出用户信息public OneTableBean queryById(int id) {OneTableBean user = null;try {user = dao.queryForId(id);} catch (SQLException e) {e.printStackTrace();}return user;}// 通过条件查询集合(例如:通过messageId和title)public List<OneTableBean> queryByMessageIdAndTitle(int messageId, String title) {try {QueryBuilder<OneTableBean, Integer> builder = dao.queryBuilder();builder.where().eq("messageId", messageId).and().eq("title", title);builder.orderBy("messageId", false);return builder.query();} catch (SQLException e) {e.printStackTrace();}return null;}// 通过条件查询集合(例如:通过content)public List<OneTableBean> queryByContent(String content) {try {QueryBuilder<OneTableBean, Integer> builder = dao.queryBuilder();builder.where().eq("content", content);builder.orderBy("title", false);return builder.query();} catch (SQLException e) {e.printStackTrace();}return null;}
}
  • 测试
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;import java.util.ArrayList;
import java.util.List;import cn.tsou.ormlite.bean.OneTableBean;
import cn.tsou.ormlite.dao.OneTableDao;public class MainActivity extends AppCompatActivity {private int position;private OneTableDao oneTableDao;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);position = 0;oneTableDao = new OneTableDao(this);}/*** 创建数据集合** @param view*/public void createList(View view) {ArrayList<OneTableBean> oneTableBeans = new ArrayList<>();for (int i = 0; i < 10; i++) {OneTableBean oneTableBean = new OneTableBean();oneTableBean.setTitle("创建数据集合" + i);oneTableBean.setBatchNo("yes");oneTableBean.setContent("哎呀");oneTableBeans.add(oneTableBean);}oneTableDao.createList(oneTableBeans);}/*** 创建数据** @param view*/public void create(View view) {OneTableBean oneTableBean = new OneTableBean();oneTableBean.setTitle("huangxiaoguo" + position);oneTableBean.setBatchNo("yes");oneTableBean.setContent("大大");oneTableDao.create(oneTableBean);OneTableBean oneTableBean1 = new OneTableBean();oneTableBean1.setTitle("huangxiaoguo" + position);oneTableBean1.setBatchNo("大大");oneTableDao.create(oneTableBean1);position++;}/*** 添加一条数据** @param view*/public void add(View view) {OneTableBean oneTableBean = new OneTableBean();if (position == 6) {oneTableBean.setTitle("huangxiaoguo" + position);oneTableBean.setBatchNo("154546");oneTableBean.setContent("dadiouahddjaopdja");} else if (position == 8) {oneTableBean.setTitle("huangxiaoguo" + position);} else {oneTableBean.setTitle("huangxiaoguo" + position);oneTableBean.setBatchNo("no");oneTableBean.setContent("大大");}oneTableDao.insert(oneTableBean);position++;}/*** 通过id删除指定数据** @param view*/public void deleteByID(View view) {oneTableDao.delete(1);}/*** 删除user表中的一条数据** @param view*/public void delete(View view) {oneTableDao.delete(oneTableDao.queryById(2));}/*** 删除数据集合** @param view*/public void deleteList(View view) {oneTableDao.deleteList(oneTableDao.queryByContent("大大"));}/*** 清空数据** @param view*/public void deleteAll(View view) {oneTableDao.deleteAll();}/*** 更新** @param view*/public void updata(View view) {OneTableBean oneTableBean = oneTableDao.queryById(5);if (oneTableBean != null) {oneTableBean.setTitle("我被更新了");oneTableDao.update(oneTableBean);}}/*** 查询user表中的所有数据** @param view*/public void queryAll(View view) {Log.d("huangxiaoguo", "-----------------------------------------------");List<OneTableBean> oneTableBeans = oneTableDao.queryAll();for (int i = 0; i < oneTableBeans.size(); i++) {Log.d("huangxiaoguo", oneTableBeans.get(i).toString());}}/*** 根据ID取出用户信息** @param view*/public void queryById(View view) {OneTableBean oneTableBean = oneTableDao.queryById(5);Log.d("huangxiaoguo", "-----------------------------------------------");if (oneTableBean != null)Log.d("huangxiaoguo", oneTableBean.toString());}/*** 通过条件查询集合** @param view*/public void queryOther(View view) {List<OneTableBean> huangxiaoguo6 = oneTableDao.queryByMessageIdAndTitle(6, "huangxiaoguo0");Log.d("huangxiaoguo", "-----------------------------------------------");Log.d("huangxiaoguo", huangxiaoguo6.toString());List<OneTableBean> huangxiaoguo61 = oneTableDao.queryByContent("大大");Log.d("huangxiaoguo", "-----------------------------------------------");Log.d("huangxiaoguo", huangxiaoguo61.toString());}
}
  • 效果展示

  • Builder说明

       queryBuilder() 创建一个查询生成器:进行复杂查询deleteBuilder() 创建一个删除生成器,进程复杂条件删除updateBuilder() 创建修条件生成器,进行复杂条件修改条件查找器DeleteBuilder,QueryBuilder,UpdateBuilder
    

在SQL语句中,经常会用到where语句,where 进行条件筛选。
dao.queryBuilder.()where()方法返回一个where对象,where中提供了很多方法来进行条件筛选,下边逐个讲where中的方法。

方法 :eq(columnName,value) 等于(=)equals

使用示范:mDao.queryBuilder().where().eq("id", 2).query();
对应SQL:SELECT * FROM t_person WHERE id = 2

方法 :lt(columnName,value) 小于(<) less than

使用示范:mDao.queryBuilder().where().lt("id", 2).query();
对应SQL:SELECT * FROM t_person WHERE id < 2

方法 :gt(columnName,value) 大于(>) greater than

使用示范:mDao.queryBuilder().where().gt("id", 2).query();
对应SQL:SELECT * FROM t_person WHERE id > 2

方法 :ge(columnName,value) 大于等于(>=)greater-than or equals-to

使用示范:mDao.queryBuilder().where().ge("id", 2).query();
对应SQL:SELECT * FROM t_person WHERE id >= 2

方法 :le(columnName,value) 小于等于(<=)less than or equals-to

使用示范:mDao.queryBuilder().where().le("id", 2).query();
对应SQL:SELECT * FROM t_person WHERE id <= 2

方法 :ne(columnName,value) 不等于(<>)not-equal-to

使用示范:mDao.queryBuilder().where().ne("id", 2).query();
对应SQL:SELECT * FROM t_person WHERE id <> 2

方法 :in(columnName,object…) 在指定列中匹配object数组所对应的值,返回匹配到的结果行集合,in还有几个重载方法,需要的话可以去看文档或源码

使用示范:mDao.queryBuilder().where().in("id", 1,2).query();
对应SQL:SELECT * FROM t_person WHERE id IN (1,2 )

方法 :notIn(columnName,object…) 在指定列中匹配object数组所对应的值,返回没有匹配到的结果行集合notIn还有几个重载方法,需要的话可以去看文档或源码

使用示范:mDao.queryBuilder().where().notIn("id",1,2).query();
对应SQL:SELECT * FROM t_person WHERE id NOT IN (1 ,2 )

方法 :like(columnName,pattern) 使用%通配符来匹配,指定行数据,返回匹配到的结果

使用示范:mDao.queryBuilder().where().like("LastName", "A%").query(); 匹配A开头的LastName
mDao.queryBuilder().where().like("LastName", “%s").query(); 匹配s结尾的LastName
mDao.queryBuilder().where().like("LastName", “%art%").query(); 匹配中间为art的LastName
对应SQL:SELECT * FROM `t_person` WHERE `LastName` LIKE 'A%'

方法 :between(columnName,low,high) 获取指定范围内的结果

使用示范:mDao.queryBuilder().where().between("id", 1, 2).query();   获取id是1到2之间的结果
对应SQL:SELECT * FROM `t_person` WHERE `id` BETWEEN 1 AND 2

方法and(),or()用来组合上述where子语句。进行与,或操作。

方法 :and() where子句与操作

使用示范:mDao.queryBuilder().where().lt("id", 3).and().gt("id", 1).query();
对应SQL:SELECT * FROM `t_person` WHERE (`id` < 3 AND `id` > 1 )

方法 :or() where子句或操作

使用示范:mDao.queryBuilder().where().eq("id", 1).or().eq("id", 2).query();
对应SQL:SELECT * FROM `t_person` WHERE (`id` = 1 OR `id` = 2 )

ORDER BY

根据指定列名排序,降序,升序
使用示范:mDao.queryBuilder().orderBy("id", false).query(); //参数false表示降序,true表示升序。
对应SQL:SELECT * FROM `t_person` ORDER BY `id` DESC(降序)

DISTINCT

过滤指定列不重复数据行,重复的只返回一次。
使用示范:mDao.queryBuilder().selectColumns("City").distinct().query();
对应SQL:SELECT DISTINCT `City` FROM `t_person`

GROUP BY

按照指定列分组
使用示范:mDao.queryBuilder().groupBy("city").query();
对应SQL:SELECT * FROM t_person GROUP BY city

offset Limit

offset跳过指定的行数
limit限制获取指定行数
使用示范:mDao.queryBuilder().offset(2).limit(2).query();  可以用来分页
对应SQL:SELECT * FROM t_person LIMIT 2 OFFSET 2

Having

等同于sql中的Having,针对分组数据,进行聚合函数(SUM, COUNT, MAX, AVG)运算。
使用示范:mPersonList = mDao.queryBuilder().groupBy("City").having("SUM(id)>4").query()
对应SQL:SELECT * FROM t_person GROUP BY City HAVING SUM(id)>4

countOf

返回查询结果的总数
使用示范:mDao.queryBuilder().countOf()
对应SQL:SELECT COUNT(*) FROM t_person

iterator

返回一个结果集的迭代器。
使用示范:Iterator<Person> iterator = mDao.queryBuilder().iterator();

queryForFirst

返回所有行的第一行。
使用示范:mDao.queryBuilder().queryForFirst();

Ormlite基本使用相关推荐

  1. ormlite 多表联合查询

    ormlite 多表联合查询 QueryBuilder shopBrandQueryBuilder = shopBrandDao.queryBuilder(); QueryBuilder shopQu ...

  2. ormlite android studio,OrmLite-android入门体验

    入门体验 OrmLite 是一个轻量级的ORM(Object Relational Mapping)数据库工具,方便持久化java对象到数据库 1. 使用准备 使用androidADT创建androi ...

  3. Android ORMLite 框架的入门用法

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39121377 大家在Android项目中或多或少的都会使用数据库,为了提高我们的 ...

  4. mysql ormlite_Loogn.OrmLite

    简要 Loogn.OrmLite是一个超简单.超高效.超灵活的基于.net standard 2.0的数据访问组件! 特点 支持sqlserver.mysql.sqlite3数据库: 通过扩展方法扩展 ...

  5. 即使用ADO.NET,也要轻量级实体映射,比Dapper和Ormlite均快

    不管出于什么原因,有时候框架人员摒弃了NH或EF,而使用原生数据库访问对象. 为了优美的编程,用上我写的轻量级映射扩展方法吧 目的:将SqlDataReader自动转换成T类型 代码如下: /// & ...

  6. (转)Android 使用com.j256.ormlite

    在web开发中经常采用的hibernate,在android也提供了一个ormlite 导入所需jar包后 摘自:http://blog.csdn.net/cuiran/article/details ...

  7. [Android学习系列8]数据库ormlite笔记

    一.下载包 http://ormlite.com/ http://ormlite.com/releases/ 把core包 和 android包   build path到项目里 二.参考资料 htt ...

  8. Android 使用ORMLite 操作数据库

    参考:http://blog.csdn.net/cjjky/article/details/7096987 ormlite 方法查询:http://ormlite.com/javadoc/ormlit ...

  9. Android 数据库框架ormlite 使用精要

    Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机 ...

  10. ServiceStack.OrmLite使用

    因为在仿真建模的过程中,希望把运行过程传递给数据可视化的控制台显示出来,约定了以离线SQLite文件最为我们的数据接口.所以考虑到用ServiceStack.OrmLite来写数据到SQLite中. ...

最新文章

  1. Hadoop集群搭建(四:Zookeeper环境安装)
  2. ExtJs之Ext.grid.GridPanel(部分未完)
  3. JVM(2)--一文读懂垃圾回收
  4. 2 QM配置-质量计划配置-编辑特性属性的代码组和代码
  5. python和java学哪个好-Python和Java该学哪个?还在纠结的你看过来呀~
  6. LR11中web_save_timestamp_param
  7. IDEA运行多个实例
  8. 华为手机动态修改手机型号参数
  9. MATLAB——tiff文件数据读取,modis
  10. matlab积分器,MATLAB_SIMULINK__积分器相关操作
  11. Windows 配置 Aria2教程
  12. Android 手机截屏
  13. FPGA_UART串口通信
  14. Windows10息屏快的问题解决办法(在更改屏幕和睡眠时间无效的情况下)
  15. 一台电脑安装两个jdk的方法
  16. 查询电脑内存条型号的办法
  17. 2023美团面试真题
  18. JavaScript 入门(一)
  19. eCharts改变饼图的默认颜色
  20. java用代码实现星期菜谱_基于JAVA的菜谱大全接口调用代码实例

热门文章

  1. 常微分方程(ODE)求解方法总结
  2. python-批量提取srt文件中的纯文本
  3. 关于MessageBox与天鹰网络战队XiaoXi系列函数的使用说明
  4. SpringBoot-Webapp
  5. Use Whoosh——Whoosh入门
  6. 关于Python中的value_counts()排序的一些问题
  7. 初识RDMA技术——RDMA概念,特点,协议,通信流程
  8. 微软收购暴雪的野心:与索尼争雄 重金布局元宇宙
  9. 计算机要学CAD3d吗,我是学电脑设计的需要用3D和CAD等软件希望大家能帮我看看这? 爱问知识人...
  10. ubuntu软件源配置