android 数据库使用之OrmLite


今天说的是数据库,我看了下别人大神的解决,结合我自己实际中用到的给大家讲解下ormlite数据库的使用

这个是需要导入的第三方jar包,

用过goolge的SqliteOpenHelper的都知道开始要继承OrmLiteSqliteOpenHelper这个类(这个谷歌官方的数据库有点类似).
重写它的onCreate(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource)创建数据库方法onUpgrade(SQLiteDatabase
database, ConnectionSource connectionSource, int oldVersion, int newVersion)数据库升级方法
.

onCreate创建数据库时第一次安装你的应用onUpgrade处理数据库表当您升级的升级应用程序到一个新的版本

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

	/** 数据库版本号 */
	private static final int DATABASE_VERSION = 2;
<span style="white-space:pre">	</span>/** 数据库名称 */
<span style="white-space:pre">	</span>public static final String DATABASE_NAME = "fframework.db";
	public DatabaseHelper(Context context) {
		super(context,DATABASE_NAME, null, DATABASE_VERSION);
	}

	private static DatabaseHelper mHelper;

	/**
	 * 三分钟自动释放的 OpenHelper
	 *
	 * @return
	 */
	public static DatabaseHelper getOpenHelper() {
//		resetTimer();
//		if(Thread.currentThread() == Looper.getMainLooper().getThread()){
//			throw new IllegalArgumentException("主线程不能进行数据库操作!");
//		}
		if (mHelper != null) {
			return mHelper;
		}
		return mHelper = OpenHelperManager.getHelper(FFApplication.app,
				DatabaseHelper.class);
	}

	private static Timer timer;
	private static int freeTime = 0;
<span style="white-space: pre;">	</span>//计时器,计时数据库在改时间内关闭
	private static void resetTimer() {
		if (timer == null) {
			timer = new Timer();
			timer.schedule(new TimerTask() {

				@Override
				public void run() {
					freeTime++;
					if (freeTime > 180) {
						timer.cancel();
						timer = null;
						freeTime = 0;
						mHelper.close();
						mHelper = null;
					}

				}
			}, 1000, 1000);
		} else {
			freeTime = 0;
		}
	}
<span style="white-space:pre">	</span>//创建数据库,这里创建了三个表
	@Override
	public void onCreate(SQLiteDatabase sqliteDatabase,
			ConnectionSource connectionSource) {
		try {
			TableUtils.createTable(connectionSource, Queue.class);
			TableUtils.createTable(connectionSource, Table.class);
			TableUtils.createTable(connectionSource, Sound.class);
			Dao<Queue, Integer> dao = DaoManager.createDao(connectionSource,
					Queue.class);
			Dao<Table, Integer> dao1 = DaoManager.createDao(connectionSource,
					Table.class);
		} catch (SQLException e) {
			Log.e(DatabaseHelper.class.getName(), "Unable to create datbases",
					e);
		}
	}
<span style="white-space:pre">	</span>//更新数据库
	@Override
	public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource,
			int oldVer, int newVer) {
	}

}
  1. @DatabaseTable(tableName="student")  tableName 表明
  2. public class Student {
  3. public static final String ID="student_id";
  4. public static final String NAME="student_name";
  5. public static final String LASTNAME="student_lastname";
  6. public static final String RESOURCE="student_resource";
  7. public static final String TEACHER_ID="tacher_id";
  8. @DatabaseField(generatedId=true,useGetSet=true,columnName=ID)
  9. private int id;
  10. @DatabaseField(foreignColumnName=Teacher.ID,foreign=true,foreignAutoCreate=true)
  11. private Teacher teacher_id;
  12. @DatabaseField(useGetSet=true,columnName=NAME)
  13. private String name;
  14. @DatabaseField(useGetSet=true,columnName=LASTNAME)
  15. private String lastName;
  16. @DatabaseField(useGetSet=true,columnName=RESOURCE)
  17. private double  resource;
  18. 一系列的set get 方法...
cloumnName:指定字段名,不指定则变量名作为字段名  canBeNull:是否可以为null
dataType:指定字段的类型 defaultValue:指定默认值  width:指定长度
 id:指定字段为id generatedId:指定字段为自增长的id,不能id,generatedIdSequence通用 foreign 指定这个字段的对象是一个外键,外键值是这个对象的id
useGetSet:指定ormlite访问变量使用set,get方法默认使用的是反射机制直接访问变量 throwIfNull,如果空值抛出异常 persisted:指定是否持久化此变量,默认true
unique:字段值唯一 uniqueCombo整列的值唯一 index:索引
uniqueIndex 唯一索引 foreignAutoRefresh 外键值,自动刷新 foreignAutoCreate 外键不存在时是否自动添加到外间表中
foreignColumnName外键字段指定的外键表中的哪个字段  

@ForeignCollectionField  表示这个表中的数据在其他表中是外键(其他表的某个字段使用@DatabaseField(foreignColumnName=一个表的id键名,foreign=true)

eager 表示该集合是在初始化这个对象的时候,是否讲对象取出还是在遍历的时候才取出,默认false遍历的时候才取出,size()方法也会引起遍历

这个注解注解的字段只能是ForeignCollection<T> or Collection<T> 对象

TableUtils

接下来介绍TableUtils完成对数据中的表进行创建,删除,清空表格,只要看一下它的静态方法.做过程序的应该都会

Dao<T,V>

包含两个泛型,第一个泛型表DAO操作的类,第二个表示操作类的主键类型

主要方法:

create:插入一条数据

createIfNotExists:如果不存在则插入

createOrUpdate:如果指定id则更新

queryForId:更具id查找

update 查找出数据

refresh的解释:If you want to use other elds in the Account, you must call refresh on the accountDao class to get the Account object lled in.

delte 删除数据

queryBuilder() 创建一个查询生成器:进行复杂查询

deleteBuilder() 创建一个删除生成器,进程复杂条件删除

updateBuilder() 创建修条件生成器,进行复杂条件修改

条件查找器DeleteBuilder,QueryBuilder,UpdateBuilder

查找器是帮助拼接条件语句的.比如查找器中有 where()方法 and()方法 eq()方法 lt()方法 qt()方法 between方法这些方法很直观..很容易都明了
什么意思

最后使用prepare()方法生成条件使用DAO.query || DAO.delete|| DAO.update 方法执行

可以使用查找生成器QueryBuilder 的 orderby limit offset 方法进行排序,分页,

//这块是封装了一个线程,由于操作数据库比较费时,不能放在主线程中,所以写了个线程进行操作数据库,用executTask方法会自动实现Dbtask接口中的两个方法,操作数据库的放到onExecut()方法中不耗时的操作放到onOk()方法中

private static final ExecutorService taskExecutor = Executors
.newSingleThreadExecutor();
 public static interface DbTask {
  void onExecut();
  void onOK();
 }
 private static class Execution implements Runnable {
  private DbTask task;
  public Execution(DbTask task) {
   this.task = task;
  }
  @Override
  public void run() {
   task.onExecut();
   FFApplication.runOnUiThread(new CallBack(task));
  }
 }
 private static class CallBack implements Runnable {
  private DbTask task;
  public CallBack(DbTask task) {
   this.task = task;
  }
  @Override
  public void run() {
   task.onOK();
  }
 }
 public static void executTask(final DbTask task) {
  taskExecutor.execute(new Execution(task));
 }
时间: 2024-10-11 00:44:00

android 数据库使用之OrmLite的相关文章

[ 转]Android快速开发–使用ORMLite操作数据库

OrmLite是一个数据库操作辅助的开源框架,主要面向Java语言.在Android面向数据库开发中,是一个比较流行的开源框架,方便操作而且功能强大,今天来学习一下,最近的项目中也有所涉及,写个博客来记一下吧,感谢大神团队贡献如此实用的开源框架,这里是OrmLite的官方网址:http://ormlite.com/ 准备工作–创建数据库及数据表 ORMlite通过Java注解的方式来建立起与数据库的映射关系,在这里我们以一个实例来进行说明,如我们现在想要建立一个简单的数据库test.db并创建一

Android 数据库框架OrmLite的使用(一)

在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar,放在你项目的libs目录下. 2.编写Bean类 package com.example.ormlite.bean; import java.util.Collection; import com.j256.ormlite.field.DatabaseField; import com.j256.

Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包

Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的,不是我们三言两语就能解决的,我一直想抽个时间自己再过一遍Sqlite和JDBC的,但是,大家也知道,琐事比较多,我们来说一下数据库的框架吧,事实上市面上,我觉得还可以的数据库框架有两个,ORMLite和GreenDao,我以前做的运动类的应用上,就需要存储大量的运动数据,我们最开始是在本地写数据库的

Android快速开发--使用ORMLite操作数据库

OrmLite是一个数据库操作辅助的开源框架,主要面向Java语言.在Android面向数据库开发中,是一个比较流行的开源框架,方便操作而且功能强大,今天来学习一下,最近的项目中也有所涉及,写个博客来记一下吧,感谢大神团队贡献如此实用的开源框架,这里是OrmLite的官方网址:http://ormlite.com/ 准备工作–创建数据库及数据表 ORMlite通过Java注解的方式来建立起与数据库的映射关系,在这里我们以一个实例来进行说明,如我们现在想要建立一个简单的数据库test.db并创建一

Android 数据库框架ormlite 使用精要

Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机率. ormlite是什么? 首先可以去它的官网看看www.ormlite.com,它的英文全称是Object Relational Mapping,意思是对象关系映射:如果接触过Java EE开发的,一定知道Java Web开发就有一个类似的数据库映射框架--Hibernate.简单来说,就是我们

android开源ORM框架OrmLite使用教程

OrmLite是一个轻量级的对象关系映射包,由Java语言开发.Github上有ormlite-core,ormlite-android,ormlite-examples,分别是主要库,android依赖和一些教程. 一.准备 为了在android上使用OrmLite,我们需要下载ormlite-core.jar和ormlite-android.jar放到项目目录下,然后: 1.创建一个类继承OrmLiteSqliteOpenHelper,实现两个抽象方法onCreate(SQLiteDatab

Android 数据库ORM框架GreenDao学习心得及使用总结&lt;一&gt;

Android 数据库ORM框架GreenDao学习心得及使用总结<一> 转: http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读写.查询等操作.因此首先想到了对整个项目的数据库框架进行优化. 原先使用android本身内置的sqllite,也就是用的最基本的SQLiteOpenHelper方法,这种方法对自己来说比较方便易懂.但是在使用过程中感觉很繁

Android 数据库读取数据显示 [5]

2016-12-1 课程内容 昨天学了Android数据库升级.降级.创建 今天把数据库表里面的数据读取出来显示到手机屏幕上 下面代码是MainActivity.java 的代码 package com.example.winxinmff; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;

Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite

Android数据库框架--GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 但是对于我个人来说,我可能更加倾向于用GreenDao,所以今天也为大家带来了GreenDao的详细博客,希望大家喜欢,之前也详细介绍了ORM的思想,如果不明白可以先看一下前面的博文,这里就不多赘述了,我们新建一个工程 一.相关介绍 官方网站 : http://greendao