最近在使用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的更多相关文章

  1. Android ORMLite ForeignCollection关联外部集合

     <Android ORMLite ForeignCollection关联外部集合>    Android ORMLite ForeignCollection关联外部集合的功能,适合层 ...

  2. Android Ormlite 学习笔记1 -- 基础

    Ormlite 是一个开源Java数据实体映射框架.其中依赖2个核心类库: 1.ormlite-android-4.48.jar 2.ormlite-core-4.48.jar 新建项目,引用上面2个 ...

  3. Android—Ormlite框架简单的操作数据库

    大家在Android项目中或多或少的都会使用数据库,为了提高我们的开发效率,当然少不了数据库ORM框架了,尤其是某些数据库操作特别频繁的app:本篇博客将详细介绍ORMLite的简易用法. 下面开始介 ...

  4. android ORMlite的应用

    ORMLite -轻量级的对象关系映射(ORM) 如果你需要在android中使用ORMLite 你需要进入官方网站http://ormlite.com/ 中下载 下载了这两个包以后,你还需要在对应的 ...

  5. Android ORMLite 框架的入门用法

    大家在Android项目中或多或少的都会使用数据库,为了提高我们的开发效率,当然少不了数据库ORM框架了,尤其是某些数据库操作特别频繁的app:本篇博客将详细介绍ORMLite的简易用法. 下面开始介 ...

  6. Android ormlite like() function is not working

    //http://stackoverflow.com/questions/7642161/android-ormlite-like-function-is-not-working try { Quer ...

  7. Android Ormlite 学习笔记2 -- 主外键关系

    以上一篇为例子,进行主外键的查询 定义Users.java 和 Role.java Users -- Role 关系为:1对1 即父表关系 Role -- Users 关系为:1对多 即子表关系 下面 ...

  8. android ormlite queryBuilder.where() 多条件

    QueryBuilder<VideoTagInfo, Integer> queryBuilder = videoTagInfoIntegerDao.queryBuilder();try { ...

  9. android ormlite 清空表

    delete from TableName; //清空数据 update sqlite_sequence SET seq = where name ='TableName';//自增长ID为0 Sam ...

随机推荐

  1. Calibre 3.4版中,为epub书籍嵌入中文字体

    1. 先把原版书籍epub文件添加到Calibre书库: 2. 书名上右键,选则 转换书籍 -> 逐个转换: 3. 在 界面外观 -> 字体 中,选择嵌入字体,在列表中选择中文字体,并勾选 ...

  2. DA14580_583_DK_II开发板入门笔记

    本文链接:http://www.cnblogs.com/obarong/p/8521893.html 1.介绍 开发板资料 参考文件: DA1458XDK蓝牙开发板用户须知1.3.pdf DA1458 ...

  3. java.lang.Exception: The server rejected the connection: None of the protocols were accepted

    solution for this is from comment for https://issues.jenkins-ci.org/browse/JENKINS-29616. The follow ...

  4. [Xamarin.Android]如何引用JAR檔案 (转帖)

    這個範例是如何在Xamarin.Android中去使用一個我們自行在開發的JAR檔案. 主要會執行的步驟如下 1. 在Xamarin建立一個Android Java Bindings Library ...

  5. Java NIO开发需要注意的陷阱(转)

    陷阱1:处理事件忘记移除key在select返回值大于0的情况下,循环处理Selector.selectedKeys集合,每处理一个必须从Set中移除 Iterator<SelectionKey ...

  6. Javascript框架设计思路图

    这个系列的随笔都是关于Javascript框架设计一书的读书笔记(作者是司徒正美),不是本人原创!!! 一.简介: 1.市面上主流的JS框架,大多数是由一个个模块组合而成,模块化是大多数让软件所遵循的 ...

  7. 【es6】数值扩展

  8. 内存溢出(Oom)和内存泄露(Memory leak)

    1.概念 内存溢出(Oom):1.内存不够用:2.数据长度短的数据类型存储了一个数据长度较大的数据类型:3.一个结果 内存泄露(Memory leak):1.忘记释放已用内存,内存管理较为常见的现象: ...

  9. CentOS 6.4下安装 Mono 3.2 和Jexus 5.4

    1.安装Mono源码安装需要的库 yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel li ...

  10. git 学习之基本概念

    在学习 Git 的时候我们经常会听到工作区,版本库,暂存区.那么这些东西指的是什么呢?本次我们就一起学习一下. 工作区 顾名思义:工作的区域,那么你一般在哪工作呢?当然是你本地可以看到的目录啦! 版本 ...