android OrmLite
最近在使用ormlite框架进行数据库的操作,下面简单的写个demo来学习下
1.下载jar包
这里使用的是ormlite-core-5.0.jar 和 ormlite-android-5.0.jar
将下载的jar包放到我们项目的libs文件夹下
2.创建实体类对象
每一个实体类对应一张表,在我们项目中的bean目录下创建一个Student类
package com.item.jiejie.lite.db; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; /**
* 定义实体类Bean,代表一张表
* 需要持久化到数据库的类,类名前需要添加@DatabaseTable,生成对应的表 类中的成员需要添加@DatabaseField,生成前面的表中的字段
* 注意:在需要持久化的类中必须要有无参的构造器
* Created by jiejie on 2017/5/3.
*/
@DatabaseTable(tableName = "tb_hello")
public class Hello {
@DatabaseField(generatedId = true)
private int id;
@DatabaseField(columnName = "name")
private String name;
@DatabaseField(columnName = "sex")
private String sex;
@DatabaseField(columnName = "age")
private int age;
/*
* 常用参数
* generatedId = true 主键,自动生成的id 该注解下的字段必须是整形(int long)
* id = true 主键
* unique = true 唯一约束 默认false
* columnName = "name" 表字段名,默认为变量名称
* canBeNull = false 非空约束,默认为true,可以为null,设为false就不能为null
* foreign = true 外键引用,字段不能是一个原始类型,应该定义一个对象当做外键引用,在外键对象的类中,必须要有一
* 个ID字段(ID, generatedId,generatedIdSequence)
* foreignAutoRefersh = true 在使用外键引用时,由于ormlite的外键引用使用的是对象,所以添加这个字段的话在查询,会把
* 外键的对象数据都查询回来,否则外键数据就只有那个对象的主键有值,其余的值都是null
* defaultValue = "小明" 默认值
* index = true 建立索引 默认为false
* uniqueIndex = true 唯一索引 默认为false
*/ //空的构造方法一定要有,否则数据库会创建失败
public Hello(){ }
public Hello(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public String toString() {
return "Hello{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}
3.编写我们的数据helper类
package com.item.jiejie.lite.db; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
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; /**
* 编写DAO类
* Created by jiejie on 2017/5/3.
*/ public class DataHelper extends OrmLiteSqliteOpenHelper{ private static final String TABLE_NAME = "Hellotext.db";
/**
* helloDao 没张表对应一个
*/
private Dao<Hello,Integer> helloDao = null; /**构造方法*/
public DataHelper(Context context) {
super(context, TABLE_NAME, null, 1);
}
//创建数据表
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource,Hello.class);
Log.d("jiejie","数据库创建成功");
} catch (SQLException e) {
e.printStackTrace();
Log.d("jiejie","数据库更新成功");
}
}
//数据库更新
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {
try {
TableUtils.dropTable(connectionSource,Hello.class,true);
onCreate(sqLiteDatabase,connectionSource);
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 单例获取该Helper
* 1.先把构造函数私有化
* 2.对外提供一个静态方法
* 3.在方法中判断如果已经存在就不再创建,如果不存在再创建这样就永远只有一个DataHelper对象
* 4.为了线程安全,需要再方法钱提供一个线程安全关键字synchronized
*/
private static DataHelper instance;
public static synchronized DataHelper getHeper(Context context){
if(instance == null){
synchronized (DataHelper.class){
if(instance == null){
instance = new DataHelper(context);
}
}
}
return instance;
}
public Dao<Hello,Integer> getHelloDao() throws SQLException{
if(helloDao == null){
helloDao = getDao(Hello.class);
}
return helloDao;
}
public synchronized void clearData(Class<Hello> clase){
try {
TableUtils.clearTable(connectionSource,clase);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 释放资源
*/
@Override
public void close() {
super.close();
helloDao = null;
}
}
4.编写我们的Dao类的进行增删改查的操作
package com.item.jiejie.lite.db; import android.content.Context;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.DatabaseConnection;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.util.ArrayList;
import java.util.List; /**
* 定义数据访问对象,对指定的表进行增删改查的操作
* Created by jiejie on 2017/5/3.
*/ public class HelloDao {
private Dao<Hello,Integer> helloDao;
private DataHelper dataHelper; /**
* 构造方法,获取数据库帮助类实例,通过传入class对象得到相应的Dao
* @param context
*/
public HelloDao(Context context){
try {
dataHelper = DataHelper.getHeper(context);
helloDao = dataHelper.getHelloDao();
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 添加一条记录
* @param hello
*/
public void add(Hello hello){
try {
helloDao.create(hello);
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 插入大量的数据
* 开启事务
* 关闭自动提交
* @param hellos
*/
public void addList(List<Hello> hellos){
try{
DatabaseConnection conn = helloDao.startThreadConnection();
Savepoint savepoint = conn.setSavePoint(null);
helloDao.setAutoCommit(conn,false);
for(Hello hello : hellos){
helloDao.createOrUpdate(hello);
}
conn.commit(savepoint);
helloDao.endThreadConnection(conn);
}catch (SQLException e){
e.printStackTrace();
}
} /**
* 删除一条记录
* @param hello
*/
public void delete(Hello hello){
try {
helloDao.delete(hello);
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 更新一条记录
* @param hello
*/
public void update(Hello hello){
try {
helloDao.update(hello);
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 查询一条记录
* @param id
* @return
*/
public Hello queryForId(int id){
Hello hello = null;
try {
hello = helloDao.queryForId(id);
} catch (SQLException e) {
e.printStackTrace();
}
return hello;
} /**
* 查询所有的记录
* @return
*/
public List<Hello> queryForAll(){
List<Hello> hellos = new ArrayList<>();
try {
hellos = helloDao.queryForAll();
} catch (SQLException e) {
e.printStackTrace();
}
return hellos;
}
}
5.测试
我在测试的时候,模拟插入3w条数据时,发现不同的模拟器 插入的时间不同,有的9s有的要将近十几s,
可能我在编写 插入大数据的时候还是有点问题的
private class TaskDb extends AsyncTask<Integer,Void,Long>{
@Override
protected void onPreExecute() {
super.onPreExecute();
} @Override
protected Long doInBackground(Integer... params) {
long start = System.currentTimeMillis();
List<Hello> hList = new ArrayList<Hello>();
for(int i=0;i<10000;i++){
Hello hello = new Hello("Hello" + i,"nan", i);
hList.add(hello);
}
helloDao.addList(hList);
long endTime = System.currentTimeMillis();
return endTime - start;
} @Override
protected void onPostExecute(Long aLong) {
super.onPostExecute(aLong);
Log.d("jiejie","数据加载成功 " +aLong);
Toast.makeText(MainActivity.this,"数据加载成功用时" +aLong ,Toast.LENGTH_SHORT).show();
}
}
android OrmLite的更多相关文章
- Android ORMLite ForeignCollection关联外部集合
<Android ORMLite ForeignCollection关联外部集合> Android ORMLite ForeignCollection关联外部集合的功能,适合层 ...
- Android Ormlite 学习笔记1 -- 基础
Ormlite 是一个开源Java数据实体映射框架.其中依赖2个核心类库: 1.ormlite-android-4.48.jar 2.ormlite-core-4.48.jar 新建项目,引用上面2个 ...
- Android—Ormlite框架简单的操作数据库
大家在Android项目中或多或少的都会使用数据库,为了提高我们的开发效率,当然少不了数据库ORM框架了,尤其是某些数据库操作特别频繁的app:本篇博客将详细介绍ORMLite的简易用法. 下面开始介 ...
- android ORMlite的应用
ORMLite -轻量级的对象关系映射(ORM) 如果你需要在android中使用ORMLite 你需要进入官方网站http://ormlite.com/ 中下载 下载了这两个包以后,你还需要在对应的 ...
- Android ORMLite 框架的入门用法
大家在Android项目中或多或少的都会使用数据库,为了提高我们的开发效率,当然少不了数据库ORM框架了,尤其是某些数据库操作特别频繁的app:本篇博客将详细介绍ORMLite的简易用法. 下面开始介 ...
- Android ormlite like() function is not working
//http://stackoverflow.com/questions/7642161/android-ormlite-like-function-is-not-working try { Quer ...
- Android Ormlite 学习笔记2 -- 主外键关系
以上一篇为例子,进行主外键的查询 定义Users.java 和 Role.java Users -- Role 关系为:1对1 即父表关系 Role -- Users 关系为:1对多 即子表关系 下面 ...
- android ormlite queryBuilder.where() 多条件
QueryBuilder<VideoTagInfo, Integer> queryBuilder = videoTagInfoIntegerDao.queryBuilder();try { ...
- android ormlite 清空表
delete from TableName; //清空数据 update sqlite_sequence SET seq = where name ='TableName';//自增长ID为0 Sam ...
随机推荐
- Compile git version inside go binary
Compile git version inside go binary Abstract 在我们编写的程序中总是希望可以直接查阅程序的版本,通过--version参数就会输出如下版本信息. Buil ...
- CSS外边距合并&块格式上下文
前言问题Margin Collapsing 外边距合并Block Formatting Context 块格式化上下文解决方案参考 前言 之前在前端开发的过程中,都没有遇到外边距合并的问题(其实是因为 ...
- 有道词典命令行查询工具(Mac/Ubuntu)
说明:此工具是基于node.js的,所以必须安装npm. 官网:https://github.com/kenshinji/yddict 安装: Mac: # 安装npm brew install np ...
- Hibernate3.3.2_ID生成策略
1,xml生成id generator:常用四个:native.identity.sequence.uuid. Annotation: 1,@GeneratedValue: a)自定义ID b)AUT ...
- ubuntu设置root权限默认密码
1.默认root密码是随机的,即每次开机都有一个新的root密码.我们可以在终端输入命令 sudo passwd,然后输入当前用户的密码2.终端会提示我们输入新的密码并确认,此时的密码就是root新密 ...
- Disable Nvidia in Lenovo Y470 Debian wheezy
1.add the apt-key as 'root' (! don't do this as 'sudo' ) $ su root $ wget -O - http://suwako.nomanga ...
- Debugging Ruby in VS Code
原文 https://dev.to/dnamsons/ruby-debugging-in-vscode-3bkj https://github.com/Microsoft/vscode-recipe ...
- 10种jquery选择器操作详解(转)
jquery选择器大体上可分为4 类: 1.基本选择器2.层次选择器3.过滤选择器4.表单选择器 其中过滤选择器可以分为:1.简单过滤选择器2.内容过滤选择器3.可见性过滤选择器4.属性过滤选择器5. ...
- R语言paste函数
中许多字符串使用 paste() 函数来组合.它可以将任意数量的参数组合在一起. 语法 粘贴(paste)函数的基本语法是: paste(..., sep = " ", colla ...
- Memcached分布式算法详解--转
http://xiexiejiao.cn/java/memcached-consistent-hashing.html Memcached分布式算法在网上一搜可以找到一大片了,不过对于Memcache ...