Android ORMLite数据库简介



一般的项目中,Android自身提供的SQLite数据库,可以满足轻量级的数据存储应用,但是,只要是存储模型稍微复杂的项目,以及数据结构模型复杂的应用,就很难再用SQLite支撑整个项目的数据存储。何况,使用SQLite编写的代码,代码后续维护和管理不容易,所以,上规模的项目中,很有必要引入一种更好用、对开发者更友好的第三方ORM数据库框架:ORMlite。

ORMLite官方的简介说:“Object Relational Mapping Lite (ORM Lite) provides some simple, lightweight functionality for persisting Java objects to SQL databases while avoiding the complexity and overhead of more standard ORM packages.”。

ORMLite是对象关系映射(Object Relational Mapping)数据库的一种轻量级SQL数据库的开发包(packages)。提供简单易用的DAO。

ORMLite官方主页:http://ormlite.com

Java语言编写,支持Java,Android平台,本文重点介绍如何在Android平台的应用开发中使用ORMLite。

在Android应用开发中使用ORMLite,首先要下载ORMLite的开发jar包,jar资源包下载主页:http://ormlite.com/releases

具体到Android,需要在 http://ormlite.com/releases 页面下载两个jar 包(本文基于ORMLite的版本是:ormlite 4.49-SNAPSHOT):

(1)core列表下的jar包;

(2)android列表下的jar包。

如图所示:

将上面的两个jar包下载后放到Android工程项目中的libs包中,如图所示:

以上完成后,ORMLite开发环境搭建就完成了,接下来就可以使用了。

首先需要创建和定义一张ORMLite用以存储的数据库表,这个表,用Java的一个类实现,例如User.java:

package zhangphil.ormlitetest.database;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName = "users")
public class User {

	public final static String USER_ID = "user_id";
	public final static String NAME = "name";
	public final static String AGE = "age";

	public User() {

	}

	public User(String name, int age) {
		this.name = name;
		this.age = age;
	}

	// @DatabaseField(generatedId = true)
	// public int id;

	@DatabaseField(id = true, columnName = USER_ID)
	public int user_id;

	@DatabaseField(columnName = NAME)
	public String name;

	@DatabaseField(columnName = AGE)
	public int age;

	public int getUserId() {
		return user_id;
	}

	public void setUserId(int uid) {
		this.user_id = uid;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "user_id:" + user_id + " 姓名:" + name + " 年龄:" + age;
	}
}

上面的这个Java类User中开始一段代码:

@DatabaseTable(tableName = "users")

此代码声明了User类中定义的数据模型,将存储在数据库表“users”中。换句话说,数据库表users中,存储的数据单元也即是类User中定义的数据模型。

其中:

@DatabaseField(columnName = “xxx”)

xxx 表示此数据字段在数据库表中的列名。

DatabaseField中,若设定id=true,则声明此id为主键。

ORMLite的数据库表定义可设置的参数比较多,这点可以参考官方文档。剩余的就是创建ORMLite数据库,和SQLite类似。ORMLite查插删改主要通过DAO。

现在给出一个简单的代码加以说:

定义一个ORMLite数据库表User.java,假设该User表存储用户的id、名字、年龄信息:

package zhangphil.ormlitetest.database;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName = "users")
public class User {

	public final static String USER_ID = "user_id";
	public final static String NAME = "name";
	public final static String AGE = "age";

	public User() {

	}

	public User(String name, int age) {
		this.name = name;
		this.age = age;
	}

	// @DatabaseField(generatedId = true)
	// public int id;

	@DatabaseField(id = true, columnName = USER_ID)
	public int user_id;

	@DatabaseField(columnName = NAME)
	public String name;

	@DatabaseField(columnName = AGE)
	public int age;

	public int getUserId() {
		return user_id;
	}

	public void setUserId(int uid) {
		this.user_id = uid;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "user_id:" + user_id + " 姓名:" + name + " 年龄:" + age;
	}
}

创建ORMLite数据库管理工具类ORMLiteDatabaseHelper.java:

package zhangphil.ormlitetest.database;

import java.sql.SQLException;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
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;

public class ORMLiteDatabaseHelper extends OrmLiteSqliteOpenHelper {

	private static ORMLiteDatabaseHelper mDatabaseHelper = null;
	private Dao<User, Integer> mUserDao = null;

	private final static String DataBase_NAME = "ormlite.db";
	private final static int DataBase_VERSION = 1;

	public ORMLiteDatabaseHelper(Context context, String databaseName,
			CursorFactory factory, int databaseVersion) {
		super(context, DataBase_NAME, factory, DataBase_VERSION);
	}

	public static ORMLiteDatabaseHelper getInstance(Context context) {
		if (mDatabaseHelper == null) {
			mDatabaseHelper = new ORMLiteDatabaseHelper(context, DataBase_NAME,
					null, DataBase_VERSION);
		}

		return mDatabaseHelper;
	}

	@Override
	public void onCreate(SQLiteDatabase arg0, ConnectionSource connectionSource) {

		Log.d(this.getClass().getName(), "ORMLite数据库 -> onCreate");

		try {
			TableUtils.createTableIfNotExists(connectionSource, User.class);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void onUpgrade(SQLiteDatabase database, ConnectionSource arg1,
			int arg2, int arg3) {

		Log.i(this.getClass().getName(), "数据库 -> onUpgrade");

		try {
			// 删除旧的数据库表。
			TableUtils.dropTable(connectionSource, User.class, true);

			// 重新创建新版的数据库。
			onCreate(database, connectionSource);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 每一个数据库中的表,要有一个获得Dao的方法。 可以使用一种更通用的模板方法如:
	 *
	 * public Dao<Class, Integer> getORMLiteDao(Class cls) throws SQLException {
	 * if (dao == null) { dao = getDao(cls); }
	 *
	 * return dao; }
	 */
	public Dao<User, Integer> getUserDao() {
		if (mUserDao == null) {
			try {
				mUserDao = getDao(User.class);
			} catch (java.sql.SQLException e) {
				e.printStackTrace();
			}
		}

		return mUserDao;
	}

	@Override
	public void close() {
		super.close();
		mUserDao = null;
	}
}

然后就可以在自己的应用中直接使用:

package zhangphil.ormlitetest;

import java.sql.SQLException;
import java.util.List;
import java.util.Random;

import com.j256.ormlite.dao.Dao;

import zhangphil.ormlitetest.database.ORMLiteDatabaseHelper;
import zhangphil.ormlitetest.database.User;
import android.support.v7.app.ActionBarActivity;
import android.widget.Toast;
import android.os.Bundle;

public class MainActivity extends ActionBarActivity {

	private Dao<User, Integer> mUserDao;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		ORMLiteDatabaseHelper mDatabaseHelper = ORMLiteDatabaseHelper
				.getInstance(this);
		mUserDao = mDatabaseHelper.getUserDao();

		Random rand = new Random();
		for (int i = 0; i < 3; i++) {
			User user = new User();
			user.setUserId(i);
			user.setName("name" + i);
			// 生成随机测试的年龄。
			user.setAge(rand.nextInt(100));

			try {
				mUserDao.createOrUpdate(user);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	@Override
	public void onStart() {
		super.onStart();

		// 全局查询
		try {
			List<User> users = mUserDao.queryForAll();

			for (User u : users) {
				Toast.makeText(this, u.toString(), Toast.LENGTH_SHORT).show();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		// 条件查询QueryBuilder
		// 假设我们给定一个用户的id=1
		int uid = 1;
		try {
			List<User> users = mUserDao.queryBuilder().where()
					.eq(User.USER_ID, uid).query();

			for (User u : users) {
				Toast.makeText(this, "查询结果 : " + u.toString(),
						Toast.LENGTH_SHORT).show();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-29 00:18:48

Android ORMLite数据库简介的相关文章

SQLite数据库简介

SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎.它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行. SQLite由以下几个部分组成:SQL编译器.内核.后端以及附件.SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),是调试.修改和扩展SQLite的内核变得更加方便.所有SQL语句都被编译成易读的.可以在SQLite虚拟机中执行的程序集.SQLite的整体结构图如下: 值得一提的是,袖珍型的SQLite竟然可以支持高达2TB大小的数据库,每个数据

android 联系人数据库

联系人数据库学习 2011-10-31(这是android2.3上联系人的db) 简介 Android中联系人的信息都是存储在一个叫contacts2.db的数据库中.该数据库的路径是:/data/data/com.android.provider.contacts/databases/contacts2.db.如图1: 我们可以在cmd中通过adb命令把该文件拉出来(具体口令为:adb  pull/data/data/com.android.provider.contacts/database

Android ORMLite ForeignCollection关联外部集合

?? <Android ORMLite ForeignCollection关联外部集合> Android ORMLite ForeignCollection关联外部集合的功能,适合层级比較深,数据模型互相渗透.交叉的数据结构或集合.尤其方便解决复杂数据模型.简单期间,我们临时以 班级 <-> 学生 这种数据模型为例加以说明.一个班级里面有若干学生(一对多,1<-n).反过来说,若干个学生集合到一个班级中(n->1). 在Android ORMLite中.这种结构模型能够

Android网络通讯简介

网络通信应该包含三部分的内容:发送方.接收方.协议栈.发送方和接收方是参与通信的主体,协议栈是发送方和接收方进行通信的契约.按照服务类型,网络通信可分为面向连接和无连接的方式.面向连接是在通信前建立通信链路,而通信结束后释放该链路.无连接的方式则不需要在通信前建立通信连接,这种方式不保证传输的质量. Android提供了多种网络通信的方式,如Java中提供的网络编程,在Android中都提供了支持.Android中常用的网络编程方式如下: 针对TCP/IP协议的Socket和ServerSock

Android Touch系统简介(二):实例详解onInterceptTouchEvent与onTouchEvent的调用过程

上一篇文章主要讲述了Android的TouchEvent的分发过程,其中有两个重要的函数:onInterceptTouchEvent和onTouchEvent,这两个函数可被重装以完成特定的逻辑.onInterceptTouchEvent的定义为于ViewGroup中,默认返回值为false,表示不拦截TouchEvent.onTouchEvent的定义位于View中,当ViewGroup要调用onTouchEvent时,会利用super.onTouchEvent.ViewGroup调用onTo

【Android 系统开发】 Android 系统启动流程简介

Android 系统启动总结 : Android 系统启动分底层 Linux 内核启动 和 应用系统启动; -- 底层系统启动 : 系统上电, bootloader 启动, linux kernel 启动, init 进程启动; -- 应用系统启动 : init 进程启动关键的进程如 Zygote 进程 和 System Server 等系统服务, 之后进入 Home 界面; 一. Android 底层系统启动流程(Bootloader Kernel init) 1. 系统上电 执行 ROM 引

Android资源文件简介

Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, 资源文件; -- 界面布局文件 : 在res/layout目录下定义, 用于定义Android中界面的显示样式; -- Java源码文件 : Android程序的逻辑实现, 程序主体; -- 资源文件 : 各种XML文件, 可以定义图片等资源, 以及各种图片, 音频, 视频, 3d模型等资源; (2)

(转载)Android显示原理简介

Android应用程序显示的过程:Android应用程序调用SurfaceFlinger服务把经过测量.布局和绘制后的Surface渲染到显示屏幕上. 名词解释 SurfaceFlinger:Android系统服务,负责管理Android系统的帧缓冲区,即显示屏幕. Surface:Android应用的每个窗口对应一个画布(Canvas),即Surface,可以理解为Android应用程序的一个窗口. Android应用程序的显示过程包含了两个部分(应用侧绘制.系统侧渲染).两个机制(进程间通讯

Android电源管理简介(上)

文章转载自:http://blog.csdn.net/hzdysymbol/archive/2009/03/19/4004791.aspx Android Power Management 总体上来说Android的电源管理还是比较简单的, 主要就是通过锁和定时器来切换系统的状态,使系统的功耗降至最低,整个系统的电源管理架构图如下: (注该图来自Steve Guo) 接下来我们从Java应用层面, Android framework层面, Linux内核层面分别进行详细的讨论: 应用层的使用: