【安卓笔记】ormlite入门
ps:写这篇文章的目的是尝试下新的markdown编辑器哈哈
简单介绍
ORMLite provides a lightweight Object Relational Mapping between Java classes and SQL databases. There are certainly more mature ORMs which provide this functionality including Hibernate and iBatis. However, the author wanted a simple yet powerful wrapper around the JDBC functions, and Hibernate and iBatis are significantly more complicated with many dependencies.
Ormlite和GreenDao都是android平台经常使用的orm框架。两者各有优势,ormlite胜在简单,可是其基于注解反射。速度比不上greendao。
ormlite官网:http://ormlite.com/
注:ormlite不仅能够用于android平台,也能够结合jdbc使用的
怎样使用
- 首先你须要加入ormlite库的依赖到build.gradle中:
dependencies {
compile ‘com.j256.ormlite:ormlite-core:4.48’
compile ‘com.j256.ormlite:ormlite-android:4.48’
}
- 创建一个bean映射数据库中相应的table
比方我这里想创建一个手机黑名单数据表,表名叫black,表相应字段例如以下:
id | name | number |
---|---|---|
主键、自增长 | 名称 | 号码 |
假设使用SqliteOpenHelper的话,须要在onCreate中运行sql语句创建table。可是使用ormlite只须要创建以下这个bean。
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
/**
* Created by Rowandjj on 2015/5/26.
*/
@DatabaseTable(tableName = "black")
public class BlackEntity//映射到数据库就是一个名为black的表
{
@DatabaseField(generatedId = true)
public int id;//使用DatabaseField注解表明这是一个字段
@DatabaseField
public String name;
@DatabaseField
public String number;
public BlackEntity(){}
public BlackEntity(String name, String number)
{
this.name = name;
this.number = number;
}
@Override
public String toString()
{
return "BlackEntity{" +
"id=" + id +
", name='" + name + '\'' +
", number='" + number + '\'' +
'}';
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getNumber()
{
return number;
}
public void setNumber(String number)
{
this.number = number;
}
}
很多其它注解如外键等等參见文档
- 继承OrmliteSqliteOpenHelper。并复写相关方法
最基本的是onCreate和onUpgrade方法。
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.RuntimeExceptionDao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;
import com.taobao.easysafe.constants.DBConfig;
import java.sql.SQLException;
/**
* Created by Rowandjj on 2015/5/26.
*/
public class ListDBHelper extends OrmLiteSqliteOpenHelper
{
/**黑名单*/
private Dao<BlackEntity, Integer> mBlackDao;
private RuntimeExceptionDao<BlackEntity, Integer> mRuntimeBlackDao;
public ListDBHelper(Context context)
{
super(context, DBConfig.BW_LIST/*数据库名称*/, null, 1);
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource)
{
try
{
TableUtils.createTable(connectionSource, BlackEntity.class);
} catch (SQLException e)
{
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion)
{
try
{
TableUtils.dropTable(connectionSource,BlackEntity.class);
onCreate(database, connectionSource);
}catch(Exception e)
{
e.printStackTrace();
}
}
public Dao<BlackEntity, Integer> getBlackDao() throws SQLException
{
if (mBlackDao == null)
{
mBlackDao = getDao(BlackEntity.class);
}
return mBlackDao;
}
public RuntimeExceptionDao<BlackEntity, Integer> getRuntimeExceptionBlackDao()
{
if(mRuntimeBlackDao == null)
{
mRuntimeBlackDao = getRuntimeExceptionDao(BlackEntity.class);
}
return mRuntimeBlackDao;
}
}
ormlite提供了TableUtils类帮我们运行创建/销毁表的功能。
- 运行CRUD操作
要想运行CRUD操作,得首先拿到Dao,即调用ListDBHelper的getBlackDao或getRuntimeExceptionBlackDao方法,这两个方法的差别是getRuntimeExceptionBlackDao不须要你写一堆try catch,当出现故障时它会自己主动抛出异常。
如今问题来了,怎样得到ListDBHelper实例呢?直接new吗??当然不!数据库连接是稀有资源,不应该创建多个实例。
Ormlite提供了OpenHelperManager类帮我们创建实例,调用静态的getHelper就可以:
ListDBHelper mDBHelper;
private ListDBHelper getHelper()
{
if (mDBHelper == null)
{
mDBHelper = OpenHelperManager.getHelper(this/*Context实例*/, ListDBHelper.class);
}
return mDBHelper;
}
ListDBHelper使用完记得释放,最佳实践是放到Activity的onDestroy中:
@Override
protected void onDestroy()
{
super.onDestroy();
if (mDBHelper != null)
{
OpenHelperManager.releaseHelper();
mDBHelper = null;
}
}
有了mDBHelper实例后,我们就能够拿到DAO。并调用其CRUD方法:
增:
private void addToBlack(ContactInfo info)
{
if (info != null && info.getName() != null && info.getNumber() != null)
{
BlackEntity entity = new BlackEntity(info.getName(), info.getNumber());
getHelper().getRuntimeExceptionBlackDao().create(entity);
}
}
查:
private List<BlackEntity> queryBlack()
{
return getHelper().getRuntimeExceptionBlackDao().queryForAll();
}
删:
dao提供了一系列的delete方法。可參考文档使用,这里介绍一种更强大的DeleteBuilder,它能够添加where条件,并且api是builder模式,不停的点点点,全然停不下来~haha,当然喽,不不过DeleteBuilder,还有QueryBuilder、UpdateBuilder等
private void removeBlack(ContactInfo info)
{
int result = -1;
if(info != null)
{
Logger.d("TAG", info.getName() + "," + info.getNumber());
try
{
DeleteBuilder builder = getHelper().getRuntimeExceptionBlackDao().deleteBuilder();
builder.where().eq("name",info.getName()).and().eq("number",info.getNumber());
result = builder.delete();
} catch (SQLException e)
{
e.printStackTrace();
}
}
}
是不是非常easy?那就赶紧用起来吧!
ps:markdown的代码高亮好难看
【安卓笔记】ormlite入门的更多相关文章
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- WebSocket学习笔记——无痛入门
WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报 分类: 物联网学习笔记(37) 版权声明:本文为博主原 ...
- [转]【安卓笔记】AsyncTask源码剖析
[转][安卓笔记]AsyncTask源码剖析 http://blog.csdn.net/chdjj/article/details/39122547 前言: 初学AsyncTask时,就想研究下它的实 ...
- Xamrin开发安卓笔记(三)
http://www.cnblogs.com/minCS/p/4118170.html Xamrin开发安卓笔记(三) 安装片 Xamrin开发安卓笔记(一) Xamrin开发安卓笔记(二) 这次 ...
- Xamrin开发安卓笔记(二)
http://www.cnblogs.com/minCS/p/4112617.html Xamrin开发安卓笔记(二) 安装篇 Xamrin开发安卓笔记(一) 昨天调理一天AAPT.EXE 被推出 ...
- Xamrin开发安卓笔记(一)
http://www.cnblogs.com/minCS/p/4108133.html Xamrin开发安卓笔记(一) 安装篇 环境虽然搭建的不稳定,不过还是可以开发的,又加了两个环境变量不知道有 ...
- Java学习笔记之---入门
Java学习笔记之---入门 一. 为什么要在众多的编程语言中选择Java? java是一种纯面向对象的编程语言 java学习起来比较简单,适合初学者使用 java可以跨平台,即在Windows操作系 ...
- Bootstrap笔记--快速入门
首先是Bootstrap的简介: 业余了解:下面这个网址可以查询IP地址的地理位置 下面学习:(具体可以参考Bootstrap中文网) 栅格系统 Bootstrap 提供了一套响应式.移动设备优先的流 ...
- DBFlow框架的学习笔记之入门
什么是DBFlow? dbflow是一款android高性的ORM数据库.可以使用在进行项目中有关数据库的操作.github下载源码 1.环境配置 先导入 apt plugin库到你的classpat ...
- MongoDB学习笔记:快速入门
MongoDB学习笔记:快速入门 一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...
随机推荐
- [Luogu 1966] noip13 火柴排队
[Luogu 1966] noip13 火柴排队 Problem 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之 ...
- ACM_黯然销魂?
黯然销魂? Time Limit: 2000/1000ms (Java/Others) Problem Description: 发神集训表现出色,决定要送他鸡翅,但是锴神决定不让他那么容易拿到,所以 ...
- HTML中的行级标签和块级标签 《转换》
1.html中的块级标签 显示为“块”状,浏览器会在其前后显示折行.常用的块级元素包括: <p>, <ul>,<table>,<h1~h6>等. 2.h ...
- [ HAOI 2010 ] 最长公共子序列
\(\\\) \(Description\) 求两个长度\(\le5000\)的大写字母串的\(LCS\)长度及个数,定义两\(LCS\)中某一字符在两序列出现位置有一处不同就视为不同. \(\\\) ...
- 实现微信小程序的wxml文件和wxss文件在phpstrom的支持
最近下载了微信小程序准备好好看看,但是发现微信小程序用的后缀名是不一样的,.wxml代表的就是平时用的.html,.wxss代码的就是平时用的.css.但是phpstorm无法识别,为了更方便的码代码 ...
- Bootstrap3模态框Modal垂直居中样式
1,Bootstrap 模态框插件Bootbox垂直居中样式: <!DOCTYPE html> <html lang="en"> <head> ...
- Android 6.0 如何添加完整的系统服务(app-framework-kernel)
最近学习了如何在Android 6.0上添加一个系统服务,APP如何通过新增的系统服务访问底层驱动.在这学习过程中,收获颇多,并结合学习了<Embeded Android>--Karim ...
- 【sqli-labs】 less48 GET -Error based -Blind -Numeric -Order By Clause(GET型基于盲注的整型Order By从句注入)
图片还是47...访问的的确是48 这个是基于bool的盲注 http://192.168.136.128/sqli-labs-master/Less-48/?sort=1 and sleep(0.1 ...
- 获取CAD安装路径
bool GetAcadPath(CString &acadPath) { DWORD dwRet=:GetModuleFileName(acedGetAcadWinApp()->m_h ...
- 用C#在Visual Studio写Javascript单元测试
1.在vs创建一个标准的单元测试工程 2.引用nuget包:Edge.js 我是用的是6.11.2版本 3.编写JsRunner类 using EdgeJs; using System; using ...