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);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, MyBean.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public 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;
}
@Override
public 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;
}
@Override
public void insert(MyBean myBean) {
try {
//事务操作
/* TransactionManager.callInTransaction(mHelper.getConnectionSource(), new Callable<Void>() {
@Override
public Void call() throws Exception {
return null;
}
});*/
dao.create(myBean);
//dao.createOrUpdate(myBean);//和上一行的方法效果一样
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void insert(ArrayList<MyBean> beanArrayList) {
try {
dao.create(beanArrayList);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public 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();
}
}
@Override
public 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();
}
}
@Override
public 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();
}
}
@Override
public 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:无数据
*/
@Override
public 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;
}
@Override
public 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;
}
@Override
public 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 表中数据的个数
*/
@Override
public long queryCount() {
long number = 0;
try {
number = dao.queryBuilder().countOf();
} catch (SQLException e) {
e.printStackTrace();
}
return number;
}
/**
* @param id 这个id 就是表中,每次插入数据,自己递增的id 字段
*/
@Override
public 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;
}
@Override
public 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 官网

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
记一次对`vulnhub`中`Android4`靶机渗透测试全过程
记一次对vulnhub中Android4靶机渗透测试全过程 首发于先知社区:https://xz.aliyun.com/t/2859 Android4靶机简介 名称:Android4 操作系统:Android v4.4 标志:/data/root/(在此目录中) 等级:初学者。 下载链接:Android4:https://download.vulnhub.com/android4/Android4.ova 搭建成功的Android平台 知识点 端口扫描和IP发现 使用adb_server_exec攻击端口8080代理 使用ADB连接到设备。 使用metasploit。 特权升级和找到答案 渗透过程 1:获取IP地址 使用命令:arp-scan -l 由此我们可以看到靶机的IP地址:192.168.232.146 2:扫描开放端口 在此扫描中,我们将使用最流行的工具nmap进行全端激进扫描 使用命令:nmap -p- -A 192.168.232.146 由此我确定存在与端口8080相关的某种网页。 没有任何延迟,我打开了网页,但什么也没找到。 大多数人都会确定使用POST方法涉及某种语...
- 下一篇
Android 数据库框架总结,总有一个适合你!
一:OrmLite 简述: 优点: 1.轻量级;2.使用简单,易上手;3.封装完善;4.文档全面。缺点:1.基于反射,效率较低(本人还没有觉得效率低);2.缺少中文翻译文档 ● jar包 地址:http://ormlite.com/releases/ ● 集成方法:把jar包复制到as的libs文件夹下,并且引用jar包即可 ● 用于学习的相关博客: 我的博客 总结:比较好的一个数据库开源框架。不过git上很久没有更新了,貌似人家好像不在git上做项目维护了,而是在 官网 上做维护更新。 二:LitePal 简述:暂无 ● git 地址:https://github.com/LitePalFramework/LitePal ● 集成方法:compile ‘org.litepal.android:core:1.5.0’ ● 用于学习的相关博客: 我的博客 郭霖的博客 总结:LitePal 框架是郭大神开源的数据库框架,他的博客也比较详细的介绍了其用法。还不错的框架。 三:GreenDao3.2 简述:其优点还包括以下几点:1.存取速度快; 2.支持数据库加密; 3.轻量级; 4.激活实体...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16