ORMLite框架 的使用方法---给你的数据库操作插上翅膀
一:首先下载 ORMLite Jar 包
先去 ORMLite官网下载jar包 写博客时,目前最新的,对于Android为:ormlite-android-5.0.jar 和 ormlite-core-5.0.jar ;
然后分包处理,建议如图所示分包:
二:配置Bean类
@DatabaseTable(tableName = "Book")public class MyBean {
@DatabaseField(generatedId = true)private int id;
@DatabaseField(columnName = "name")public String name;
@DatabaseField(columnName = "author")public String author;
@DatabaseField(columnName = "price")public String price;
@DatabaseField(columnName = "pages")public int pages;
public String getAuthor() {return author;}
public void setAuthor(String author) {this.author = author;}
public String getPrice() {return price;}
public void setPrice(String price) {this.price = price;}
public int getPages() {return pages;}
public void setPages(int pages) {this.pages = pages;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
三:编写Helper类
public class MyDatabaseHelper extends OrmLiteSqliteOpenHelper {
public static final String DB_NAME = "BookStore.db";public static final int DB_VERSION = 1;
public MyDatabaseHelper(Context context) {super(context, DB_NAME, null, DB_VERSION);}
@Overridepublic void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {try {TableUtils.createTable(connectionSource, MyBean.class);} catch (SQLException e) {e.printStackTrace();}}
@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion) {System.out.println("MyDatabaseHelper.onUpgrade oldVersion=" + oldVersion + " newVersion=" + newVersion);try {
switch (oldVersion) {case 1:getDao(MyBean.class).executeRaw("alter table Book add column book_type varchar(20)");//在数据库版本1的下一版本,Book表中新添加了 book_type 字段
case 2:// TableUtils.createTable(connectionSource, MyBean2.class);//在数据库版本2的下一版本,新增加了一张表default:break;}
//显然这样处理比较暴力//TableUtils.dropTable(connectionSource, MyBean.class, true);//onCreate(sqLiteDatabase, connectionSource);} catch (SQLException e) {e.printStackTrace();}}
private static MyDatabaseHelper instance;
/*** 单例获取该Helper** @param context* @return*/public static MyDatabaseHelper getHelper(Context context) {if (instance == null) {synchronized (MyDatabaseHelper.class) {if (instance == null)instance = new MyDatabaseHelper(context);}}return instance;}
private Map<String, Dao> daos = new HashMap<>();
public synchronized Dao getDao(Class clazz) throws SQLException {Dao dao = null;String className = clazz.getSimpleName();if (daos.containsKey(className)) {dao = daos.get(clazz);}if (dao == null) {dao = super.getDao(clazz);daos.put(className, dao);}return dao;}
@Overridepublic void close() {super.close();for (String key : daos.keySet()) {Dao dao = daos.get(key);dao = null;}}
}
四:编写DAO类
1:接口编写:
public interface MyDataImpl {
void insert(ArrayList<MyBean> beanArrayList);
void insert(MyBean myBean);
void update(String name, String price);
void update2(String columnName, String columnValue);
void update3(String queryColumnName, String queryColumnValue, String setColumnName, String setColumnValue);
void delete(String name);
int deleteAll();
ArrayList<String> queryPrice(String name);
String queryAuthor(String name, String price);
long queryCount();
ArrayList<MyBean> queryId(int id);
ArrayList<MyBean> queryAll();
}
public class MyDataDao implements MyDataImpl {private MyDatabaseHelper mHelper;private Dao<MyBean, Integer> dao;private Context mContext;private static MyDataDao instance;
protected MyDataDao(Context context) {this.mContext = context;try {mHelper = MyDatabaseHelper.getHelper(mContext);dao = mHelper.getDao(MyBean.class);} catch (SQLException e) {e.printStackTrace();}}
public static MyDataDao getInstance(Context context) {if (instance == null) {synchronized (MyDataDao.class) {if (instance == null) {instance = new MyDataDao(context);}}
}return instance;}
@Overridepublic void insert(MyBean myBean) {
try {
//事务操作/* TransactionManager.callInTransaction(mHelper.getConnectionSource(), new Callable<Void>() {@Overridepublic Void call() throws Exception {return null;}});*/
dao.create(myBean);//dao.createOrUpdate(myBean);//和上一行的方法效果一样} catch (SQLException e) {e.printStackTrace();}}
@Overridepublic void insert(ArrayList<MyBean> beanArrayList) {try {dao.create(beanArrayList);} catch (SQLException e) {e.printStackTrace();}}
@Overridepublic void update(String name, String price) {ArrayList<MyBean> list = null;try {list = (ArrayList<MyBean>) dao.queryForEq("name", name);if (list != null) {for (MyBean bean : list) {bean.setPrice(price);dao.update(bean);//dao.createOrUpdate(bean);//和上一行的方法效果一样}
}} catch (SQLException e) {e.printStackTrace();}}
@Overridepublic void update2(String columnName, String columnValue) {try {//下面这两个代码的意思一样dao.updateBuilder().updateColumnValue(columnName, columnValue).update();//dao.updateRaw("update Book set " + columnName + "=?", new String[]{columnValue});} catch (SQLException e) {e.printStackTrace();}
}
@Overridepublic void update3(String queryColumnName, String queryColumnValue, String setColumnName, String setColumnValue) {try {String sql = "update Book set " + setColumnName + "= '" + setColumnValue + "' where " + queryColumnName + "= '" + queryColumnValue + "'";System.out.println("MyDataDao.update3 sql=" + sql);dao.updateRaw(sql);
//dao.updateRaw("update Book set price= '33333元' where name= '西游记'");//等价于上面的写法} catch (SQLException e) {e.printStackTrace();}}
@Overridepublic void delete(String name) {ArrayList<MyBean> list = null;try {list = (ArrayList<MyBean>) dao.queryForEq("name", name);if (list != null) {for (MyBean bean : list) {dao.delete(bean);}}} catch (SQLException e) {e.printStackTrace();}}
/*** @return -1:删除数据异常 0:无数据*/@Overridepublic int deleteAll() {int number = -1;try {number = dao.deleteBuilder().delete();//返回删除的数据条数 例如:删除1条数据,返回1,依次类推。
//dao.deleteBuilder().where().eq("name", "记").reset();//????} catch (SQLException e) {e.printStackTrace();}return number;}
@Overridepublic ArrayList<String> queryPrice(String name) {List<MyBean> list = null;ArrayList<String> strings = null;try {list = dao.queryForEq("name", name);if (list != null) {strings = new ArrayList<>();for (MyBean myBean : list) {strings.add(myBean.getPrice());}/*for (int i = 0; i < list.size(); i++) {strings.add(list.get(i).getPrice());}*/}} catch (SQLException e) {e.printStackTrace();}return strings;}
@Overridepublic String queryAuthor(String name1, String price1) {List<MyBean> list = null;String author = "";
try {list = dao.queryBuilder().where().eq("name", name1).and().eq("price", price1).query();//上述相当与:select * from Book where name = name1 and price = price1 ;if (list != null) {for (MyBean myBean : list) {author = myBean.getAuthor();}}} catch (SQLException e) {e.printStackTrace();}
return author;//说明:如果这个 author 是唯一的,可以这样的返回。如果是多个的话,要返回一个ArrayList<String> 类型}
/*** @return 表中数据的个数*/@Overridepublic long queryCount() {long number = 0;try {number = dao.queryBuilder().countOf();} catch (SQLException e) {e.printStackTrace();}return number;}
/*** @param id 这个id 就是表中,每次插入数据,自己递增的id 字段*/@Overridepublic ArrayList<MyBean> queryId(int id) {ArrayList<MyBean> list = null;
try {MyBean myBean = dao.queryForId(id);if (myBean != null) {list = new ArrayList<>();list.add(myBean);}return list;} catch (SQLException e) {e.printStackTrace();}return list;}
@Overridepublic ArrayList<MyBean> queryAll() {ArrayList<MyBean> list = null;try {list = (ArrayList<MyBean>) dao.queryForAll();
if (list != null) {return list;}} catch (SQLException e) {e.printStackTrace();}return list;}
public boolean delteTables(Context context, String DBname) {//?????return false;}
/*** 这个方法可以的*/public boolean delteDatabases(Context context, String DBname) {return context.deleteDatabase(DBname);}
}
五:测试
源码下载地址
参考文章:
● Android快速开发–使用ORMLite操作数据库
● 鸿洋的博客:
● Android ORMLite 框架的入门用法
● Android 快速开发系列 ORMLite 框架最佳实践
● SQL 语法
● SQL UPDATE 语句
● OrmLite 官网
ORMLite框架 的使用方法---给你的数据库操作插上翅膀相关推荐
- android ormlite框架,ORMLite框架 的使用方法—给你的数据库操作插上翅膀
一:首先下载 ORMLite Jar 包 先去 ORMLite官网下载jar包 写博客时,目前最新的,对于Android为:ormlite-android-5.0.jar 和 ormlite-core ...
- python操作数据库的几种方法_python对mysql数据库操作的三种不同方式
原标题:python对mysql数据库操作的三种不同方式 |转载自:博客园 |原文链接:http://www.cnblogs.com/mryrs/p/6951008.html 先要说一下,在这个暑期如 ...
- CI框架的使用-原生SQL和ORM模式操作数据库、视图
一 数据库配置文件的配置和自动加载 1 直接修改config文件夹下面的database.php,把数据库相关信息填上去即可 $db['default'] = array('dsn' => ' ...
- 笔记本连网线显示服务器拒绝连接怎么办,笔记本插上网线没反应怎么办【解决方法】...
电脑是我们生活和工作中不可缺少的,而电脑的工作还是依靠于网络,如果没有网络的话,电脑也是起不到什么作用的,而使用电脑的朋友都会遇到一些问题,而最常见的问题就是插上 网线 之后,电脑上不了网.不管如果怎 ...
- Android ORMLite 框架的入门用法
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39121377 大家在Android项目中或多或少的都会使用数据库,为了提高我们的 ...
- android 本地数据库持久化框架,android数据库持久化框架, ormlite框架,
前言 Android中内置了SQLite,但是对于数据库操作这块,非常的麻烦.其实可以试用第3方的数据库持久化框架对之进行结构上调整, 摆脱了访问数据库操作的细节,不用再去写复杂的SQL语句.虽然这样 ...
- android ormlite框架,Android ORMLite 框架的入门用法
大家在Android项目中或多或少的都会使用数据库,为了提高我们的开发效率,当然少不了数据库ORM框架了,尤其是某些数据库操作特别频繁的app:本篇博客将详细介绍ORMLite的简易用法. 下面开始介 ...
- OrmLite框架 —— OrmLite 入门使用(一)
注:本片文章参考于http://blog.csdn.net/industriously/article/details/50790624 OrmLite 三篇文章 OrmLite框架 -- OrmLi ...
- 安卓学习 Day24:ORMLite框架
文章目录 一.ORM概述 二.类与表的对应关系 三.案例演示 1.创建安卓应用 2.导入ORMLite的依赖 3.创建与person表对应的实体类 - Person (1)创建Person类 (2)定 ...
最新文章
- 基于c语言优先级病房呼叫_C语言
- BK资本管理公司创始人阐述BCH接下来的三种“催化剂”
- 封装php连接数据库返回方法
- QT中个数据类型的转换
- Centos root权限的变化
- Storm编程入门API系列之Storm的可靠性的ACK消息确认机制
- 使用Akka处理1000万条消息
- 几个小时后,我学数据库,找到一些代码
- 简单工厂模式和策略模式的区别
- cat3 utp是不是网线_CAT网线知识
- RISV-Reader小结
- 小米 2015 北京 研发面试
- 电脑维修中的十个笑话
- 【正则表达式】去除首尾空格
- 如何快速推广个人微信公众号?
- 大创项目前传——爬虫阶段(1)
- leetcode面试题 804. 唯一摩尔斯密码词
- 【数据库原理与应用 - 第六章】T-SQL 在SQL Server的使用
- 基于RSA的t-out-of-n OT协议
- 查看linux进程超时,Linux,在子进程上超时(Linux, timing out on subprocess)