Android ORMLite数据库简介

article/2025/10/29 11:51:05


一般的项目中,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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic void onCreate(SQLiteDatabase arg0, ConnectionSource connectionSource) {Log.d(this.getClass().getName(), "ORMLite数据库 -> onCreate");try {TableUtils.createTableIfNotExists(connectionSource, User.class);} catch (Exception e) {e.printStackTrace();}}@Overridepublic 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;}@Overridepublic 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;@Overrideprotected 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();}}}@Overridepublic 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=1int 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();}}
}



http://chatgpt.dhexx.cn/article/VjvJHcnT.shtml

相关文章

python的网络请求库urllib、urllib2、urllib3、request的联系

文章目录 1. 简介2. urllib3. urllib24. urllib35. requests6. 相关文章 1. 简介 urllib、urllib2、urllib3、request均能通过网络访问互联网上的资源文件&#xff0c;它们通过使用统一资源定位符&#xff08;URL&#xff09;并结合re模块完成很多意想不到的操作。 urllib&am…

python3安装urllib2_python3.6想使用urllib2包怎么办

Python3.6.6或者说python3.x找不到urllib2语法问题修改之后&#xff0c;会报一个没有安装urllib2的包的错误。 通过pip install urllib2也会提示找不到包。(推荐学习&#xff1a;Python视频教程) 通过pip3 install urllib2也会提示找不到包。 这是因为builtwith依赖于urllib2包…

pythonurllib2方法_解决python3.6想使用urllib2包的方法

解决python3.6想使用urllib2包的方法 发布时间&#xff1a;2020-08-11 14:24:50 来源&#xff1a;亿速云 阅读&#xff1a;131 作者&#xff1a;小新 小编给大家分享一下解决python3.6想使用urllib2包的方法&#xff0c;相信大部分人都还不怎么了解&#xff0c;因此分享这篇文章…

python安装urllib2_Python如何安装urllib2库

urllib2 是 Python2.7 自带的模块(不需要下载,导入即可使用)。 urllib2库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。 在Python中有很多库可以用来抓取网页,我们先学习urllib2。urllib2 是 Python2.7 自带的模块(不需要下载,…

python爬虫-urllib2的使用方法详解(python3)

文章目录 python编程快速上手&#xff08;持续更新中…&#xff09;python爬虫从入门到精通urllib2概述python2与python3对比urlopenRequestUser-Agent添加更多的Header信息 urllib2默认只支持HTTP/HTTPS的GET和POST方法URL编码转换&#xff1a;urllib.parse.urlencode模拟百度…

Urllib2库丨Python爬虫基础入门系列(12)

提示&#xff1a;文末有福利&#xff01;最新Python爬虫资料/学习指南>>戳我直达 文章目录 前言Urllib2库学习目的urlopenGET请求方式利用urllib2.Request类,添加Header信息POST请求方式抓取招聘信息思考一下 小结 总结 前言 Urllib2库 urllib2是python2.7自带的模块(不…

Hyper-V虚拟化

第一章 Hyper-V 介绍 1-1 Hyper-V发展历史 2003 年&#xff0c;微软收购了一家虚拟化软件公司。2004 年推出了第一个桌面虚拟化产品Virtual PC 2004&#xff0c;其功能类似于VMware 工作站(work station)。由于该虚拟化产品集成在操作系统之中&#xff0c;所以用户可以在windo…

QNX Hypervisor管理程序

QNX Hypervisor管理程序 借助 QNX 管理程序&#xff0c;可以将具有不同操作系统&#xff0c;不同可靠性和安全要求的多个嵌入式系统&#xff0c;整合到单个片上系统 (SoC) 中。可以轻松地将未修改的代码移动到最新的硬件上&#xff0c;只需在适当配置的hypervisor 管理程序虚拟…

怎么开启windows hypervisor platform,解决hypervisor platform消失无法安装的问题

正常的windows功能面板 我的 很好,没有安装windows hypervisor platform的机会,但是没关系(ps:此处描述有误中文名称应该是虚拟机监控程序平台) 然后cmd 或powershll 管理员身份运行 Dism /online /Get-Features 可以查看到hypervisor platform是禁用状态 ::%cd%代表的是执…

Android Studio安装常见问题详解——Android Emulator Hypervisor Driver for AMD Processors installation failed.

目录 一、问题描述二、解决方案2.1 开启CPU虚拟化2.2 禁用Hyper-V2.3 使用管理员命令行在驱动程序包中执行“silent_install.bat” 一、问题描述 新买的AMD轻薄本&#xff0c;在安装Android Studio时遇到问题&#xff1a; Android Emulator Hypervisor Driver for AMD Process…

Hypervisor之半虚拟化virtio

1 基本概念 virtio共享内存使用的是guest GPA&#xff0c;由guest virtio front-end驱动初始化队列的时候分配&#xff0c;在back-end驱动中&#xff0c;QVM或者QEMU将GPA转换到HVA或者HPA地址再读写数据。 virtio front-end通知back-end方式&#xff1a;访问doorbell寄存器触发…

VMware vSphere Hypervisor (ESXi) 7.0U3g安装

VMware vSphere Hypervisor“ESXi” 7.0U3g 安装 一、准备工作1、查看支持ESXI7.0U3的CPU型号&#xff1b;2、下载将镜像制作成安装盘的软件&#xff1b;3、注册vmware账号&#xff0c;下载ESXI7.0U3镜像&#xff1b; 二、安装VMware vSphere Hypervisor (ESXi) 7.0U3g三、配置…

Vmware vSphere hypervisor 虚拟化软件安装

目录 一、概述 1.1.什么是 vSphere Hypervisor&#xff1f; 二、U盘启动制作 2.1. ultraiso安装完成后打开文件 2.2.选择我们下载好的虚拟化软件ios 2.3.写入映像文件 2.4.写入硬盘映像&#xff0c;驱动器选择插入的U盘 三、 Vmware vSphere hypervisor安装 四、虚拟机…

Hypervisor---虚拟化技术简易说明

Hypervisor&#xff0c;虚拟机监视器&#xff08;英语&#xff1a;virtual machine monitor&#xff0c;缩写为 VMM&#xff09;&#xff0c;是一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。 被Hypervisor用来执行一个或多个虚拟机器…

hypervisor - qnx

按照definition of Goldberg (1973), Hypervisor – Wikipedia: qnx hypervisor is type 2 QNX considers its hypervisor to be a type 1 (although it is a type 2)

什么是虚拟机管理程序hypervisor,什么是hypervisor type 1, hypervisor type 2

服务器虚拟化目前是IT界的一个热门话题。它的受欢迎程度和使用率一直在增长&#xff0c;尤其是在企业环境中。使虚拟化成为可能的是所谓的hypervisor 管理程序。服务器虚拟化允许不同的操作系统在一台服务器上运行单独的应用程序&#xff0c;同时仍使用相同的物理资源。这些虚拟…

了解以及区分物理机,虚拟机(hypervisor/VMM) 和 容器(Docker)的适用场景

了解以及区分物理机&#xff0c;虚拟机hypervisor/VMM 和 容器Docker的适用场景 Abbreviations物理机和虚拟机以及容器的区别动机motivation&#xff1a;为什么要有虚拟机物理机:虚拟机容器 虚拟机的种类以及他们的本质区别虚拟化方式虚拟机类型docker技术传统计算机体系结构虚…

虚拟化与hypervisor

文章目录 虚拟化HypervisorHypervisor分类Hypervisor优点Container vs HypervisorHypervisorContainer 虚拟化 虚拟化通过将公司的物理资源视为可以动态分配虚拟资源的池&#xff0c;从而提高了IT资源的利用率。 虚拟化涉及从物理思维到逻辑思维的转变&#xff0c;将IT资源视…

Hypervisor 简介

单词解释 Hypervisor&#xff1a;超级监督者&#xff0c;管理程序 虚拟化技术 概念 一种运行在基础物理服务器和操作系统之间的中间软件层&#xff0c;可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisor协调着这些硬件资源的访问&#xff0c;以及各个虚拟机之间…

Hypervisor技术

KVM介绍 KVM内置于Linux&#xff0c;是内核模块&#xff1b;KVM可以直接利用Linux来做一些在xen中需要利用hypervisor来做的事情&#xff0c;比如任务调度&#xff0c;内存管理等等。所以相比之下&#xff0c;KVM更轻量&#xff0c;更易管理&#xff0c;并且版本更新也可以随着…