最近在使用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. 使用二叉搜索树实现一个简单的Map

    之前看了刘新宇大大的<算法新解>有了点收获,闲来无事,便写了一个二叉搜索树实现的Map类. java的Map接口有很多不想要的方法,自己定义了一个 public interface IMa ...

  2. Mac 10.12安装IntelliJ出品的数据库管理工具DataGrip

    下载: (链接: https://pan.baidu.com/s/1nvJw88T 密码: srv2) 安装参考: http://www.cnblogs.com/EasonJim/p/7868645. ...

  3. PSR2规范

    为了尽可能的提升阅读其他人代码时的效率,下面例举了一系列的通用规则,特别是有关于PHP代码风格的.各个成员项目间的共性组成了这组代码规范.当开发者们在多个项目中合作时,本指南将会成为所有这些项目中共用 ...

  4. Java多线程(二)同步与等待唤醒

     1:数据安全问题 1.1:什么情况下会出现数据安全问题? 多个线程对同一个资源进行操作,并且操作资源的语句有多条.那么这个时候这些语句因为cpu的随机性,有可能被多个线程分开执行.导致数据安全问题. ...

  5. IDEA Maven Mybatis generator 自动生成代码

    IDEA Maven Mybatis generator 自动生成代码 一.安装配置maven以及在Idea中配置maven 安装过程步骤可以看上面的博文,里面介绍得很详细. 二.建数据表 DROP ...

  6. XXX is not in the sudoers file. This incident will be reported 的问题解决方案

    不多说,直接上干货! 说的是,这种问题,是出现在ubuntu系统里. root@SparkSingleNode:/usr/local/jdk# pwd /usr/local/jdk root@Spar ...

  7. 编译原理LL(1)文法

    从左向右扫描输入,然后产生最左推导(就是每次都把最左边的非终结字符用产生式代替). (一)First集合 比如有产生式 A-> + T | - P , 当我们读到串为 +开头的时候,我们可以很直 ...

  8. python笔记08-----正则表达式

    创建正则表达式对象 import re 常用匹配语法 re.match 从头开始匹配 re.search 匹配包含 re.findall 把所有匹配到的字符放到以列表中的元素返回 re.splital ...

  9. C 扩展库 - mysql API

    MySQL API C API Data Structures MYSQL This structure represents handler for one database connection. ...

  10. digestmd5.c:4037:15: error: #elif with no expression

    执行如下:sed -i.bak 's/#elif WITH_DES/#elif defined(WITH_DES)/' \ plugins/digestmd5.c