Android数据库框架-----ORMLite 的基本用法
ORMLite 是一款非要流行的Android平台上的数据库框架,性能优秀,代码简洁;
简述: 优点: 1.轻量级;2.使用简单,易上手;3.封装完善;4.文档全面。
缺点:1.基于反射,效率较低(本人还没有觉得效率低);2.缺少中文翻译文档
准备工作:
jar包 地址:http://ormlite.com/releases/
集成方法:把jar包复制到as的libs文件夹下,并且引用jar包即可
之后创建一个类User,并完成相关配置
@DatabaseTable(tableName="tb_user")//标明数据库中的一张表,表名tb_user
public class User { @DatabaseField(generatedId = true)//generatedId 表示id为主键且自动生成
private int id;
@DatabaseField(columnName = "name")
private String name;
@DatabaseField(columnName = "desc")
private String desc; public User()
{
} public User(String name, String desc)
{
this.name = name;
this.desc = desc;
} public int getId()
{
return id;
} public void setId(int id)
{
this.id = id;
} public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} public String getDesc()
{
return desc;
} public void setDesc(String desc)
{
this.desc = desc;
}
}
基本的数据库操作
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String TABLE_NAME = "sqlite-test.db";
/**
* userDao ,每张表对于一个
*/
private Dao<User, Integer> userDao;
private DatabaseHelper(Context context)
{
super(context, TABLE_NAME, null, 2);
}
//创建表
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource,User.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
//更新表
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {
try {
TableUtils.dropTable(connectionSource,User.class,true);//删除操作
onCreate(sqLiteDatabase, connectionSource);//创建
} catch (SQLException e) {
e.printStackTrace();
}
}
private static DatabaseHelper instance;
public static synchronized DatabaseHelper getHelper(Context context)
{
if (instance == null)
{
synchronized (DatabaseHelper.class)
{
if (instance == null)
instance = new DatabaseHelper(context);
}
}
return instance;
}
/**
* 获得userDao
*
* @return
* @throws SQLException
*/
public Dao<User, Integer> getUserDao() throws SQLException
{
if (userDao == null)
{
userDao = getDao(User.class);
}
return userDao;
}
//释放资源
@Override
public void close() {
super.close();
}
}
MainActivity.Java
得到操作对象
DatabaseHelper helper = DatabaseHelper.getHelper(this);
1:添加
User user= new User("zhangqie"+ni++, "2B青年");
try {
helper.getUserDao().create(user);//返回>0则成功
} catch (SQLException e)
{
}
2:删除
try
{
return helper.getUserDao().deleteById(id);
} catch (SQLException e)
{
}
return 0;
3:修改
User user= new User("zhangqie----android", "2B青年");
user.setId(1);//修改Id=1的
try
{
return helper.getUserDao().update(user);
} catch (SQLException e)
{
}
return 0;
4:查询
try
{
List<User> users=helper.getUserDao().queryForAll();
} catch (SQLException e)
{
}
以上的实现方式是基本的使用方式;只有一个类User操作的,万一有多个呢,就不好操作了;
接下来的这种方式:通过一个DatabaseHelper类就可以完成所有类的数据库操作
整个DatabaseHelper使用单例只对外公布出一个对象,参考文章:http://www.touchlab.co/2011/10/single-sqlite-connectio
public class DatabaseHelpers extends OrmLiteSqliteOpenHelper {
private static final String TABLE_NAME = "sqlite-test.db";
private Map<String,Dao> daos=new HashMap<String, Dao>();
public DatabaseHelpers(Context context){
super(context,TABLE_NAME,null,4);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, User.class);
//多个类在此添加即可
//TableUtils.createTable(connectionSource, Article.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {
try
{
TableUtils.dropTable(connectionSource, User.class, true);
//TableUtils.dropTable(connectionSource,Article.class,true);//多个类在此添加即可
onCreate(sqLiteDatabase, connectionSource);
} catch (SQLException e)
{
e.printStackTrace();
}
}
//整个DatabaseHelper使用单例只对外公布出一个对象,保证app中只存在一个SQLite Connection
private static DatabaseHelpers instance;
/**
* 单例获取该Helper
*
* @param context
* @return
*/
public static synchronized DatabaseHelpers getHelper(Context context)
{
context = context.getApplicationContext();
if (instance == null)
{
synchronized (DatabaseHelper.class)
{
if (instance == null)
instance = new DatabaseHelpers(context);
}
}
return instance;
}
public synchronized Dao getDao(Class clazz) throws SQLException
{
Dao dao = null;
String className = clazz.getSimpleName();
if (daos.containsKey(className))
{
dao = daos.get(className);
}
if (dao == null)
{
dao = super.getDao(clazz);
daos.put(className, dao);
}
return dao;
}
/**
* 释放资源
*/
@Override
public void close()
{
super.close();
for (String key : daos.keySet())
{
Dao dao = daos.get(key);
dao = null;
}
}
}
我已User为例介绍即可
用一个UserDao来完成相关操作,多个实体类建立多个 XXDao操作了即可
public class UserDao {
private Context context;
//通过此集合和DatabaseHelper的Map集合相对应 Dao中的类 如User 就可以随意变换了
private Dao<User, Integer> userDaoOpe;
private DatabaseHelpers helper;
public UserDao(Context context)
{
this.context = context;
try
{
helper = DatabaseHelpers.getHelper(context);
userDaoOpe = helper.getDao(User.class);
} catch (SQLException e)
{
e.printStackTrace();
}
}
/**
* 增加一个用户
* @param user
*/
public int add(User user)
{
try
{
return userDaoOpe.create(user);
} catch (SQLException e)
{
e.printStackTrace();
}
return 0;
}
/**
* 增加一个用户
* @param id
*/
public int delete(int id)
{
try
{
return userDaoOpe.deleteById(id);
} catch (SQLException e)
{
e.printStackTrace();
}
return 0;
}
/**
* 修改
* @param user
*/
public int update(User user)
{
try
{
return userDaoOpe.update(user);
} catch (SQLException e)
{
e.printStackTrace();
}
return 0;
}
/**
* 查询
*/
public List<User> query()
{
try {
return userDaoOpe.queryForAll();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public User get(int id)
{
try
{
return userDaoOpe.queryForId(id);
} catch (SQLException e)
{
e.printStackTrace();
}
return null;
}
}
得到操作对象UserDao
UserDao userDaos=new UserDao(this);
1:添加
User u1 = new User("zq"+(ni+=5), "2B青年");
userDaos.add(u1);
2:删除
int is= userDaos.delete(2);//成功 1 失败 0
3:修改
User u2 = new User("张三丰", "老道");
u2.setId(1);
userDaos.update(u2);
4:查询
List<User> users=userDaos.query();
String username="";
for (int i=0;i<users.size();i++){
username+=+users.get(i).getId()+"-----"+users.get(i).getName()+"\n";
}
textView.setText(username);
两种效果差不多,实现方式不同而已,运行效果如下:

由于代码太多,就不一一贴出来了,直接下载源码即可 源码点击下载
上面简单介绍了如何使用ORMLite框架,Android数据库框架-----ORMLite关联表的使用将对其用法进行深入的介绍。
不足之处请留言指正!有问题的可以给我留言!谢谢!
Android数据库框架-----ORMLite 的基本用法的更多相关文章
- Android数据库框架-----ORMLite关联表的使用
上一篇已经对ORMLite框架做了简单的介绍:Android数据库框架-----ORMLite 的基本用法~~本篇将介绍项目可能会使用到的一些用法,也为我们的使用ORMLite框架总结出一个较合理的用 ...
- Android 数据库框架OrmLite的使用(一)
在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar ...
- Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包
Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...
- Android 数据库框架ormlite
Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机 ...
- Android数据库框架-ORMLite
参考资料 Android ORMLite 框架的入门用法 Android 快速开发系列 ORMLite 框架最佳实践 添加依赖 compile 'com.j256.ormlite:ormlite-an ...
- Android 数据库框架OrmLite的使用(二)
前面说了OrmLite的基本使用,现在说下更规范的做法以及常用的一些功能. 1.DatabaseHelper package com.example.ormlite.db; import java.s ...
- Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite
Android数据库框架--GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架--ORMLite轻量级的对象关系映射 ...
- Android 数据库框架总结(转)
转自 http://blog.csdn.net/da_caoyuan/article/details/61414626 一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完 ...
- Android 数据库框架总结,总有一个适合你!
一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面.缺点:1.基于反射,效率较低(本人还没有觉得效率低):2.缺少中文翻译文档 jar包 地址:http: ...
随机推荐
- PAT 1069 The Black Hole of Numbers[简单]
1069 The Black Hole of Numbers(20 分) For any 4-digit integer except the ones with all the digits bei ...
- Part01、sqlalchemy 使用
一.ORM 连表 一对多 1.创建表,主动指定外键约束. 2.操作. ...
- 查看电脑已经连过的wifi密码
用下面两条命令可以完成 查看当前系统已经保存的网络 netsh wlan show profiles 查看wifi指定密码 netsh wlan show profiles name="wi ...
- kubernetes Metrics-server 安装
一.Metrics-server安装: 由于使用自动扩容,得安装heapster或metrics-server(由于heapster停止更新故用metrics-server): 1.安装之前需要为ku ...
- Lua 基础总结
lua 数组下标从 1 开始, 不是 0 lua 逻辑运算符 与 或 非 就是英文 and or not local 局部变量 数据类型:lua是一门动态类型语言,变量没有类型,只有值才有 ...
- 用random模块实现验证码
#! /usr/bin/env python3 import random checkcode = "" ## 全部为数字的验证码 # for i in range(4): # c ...
- oracle中length、lengthb、substr、substrb用法小结
我记得我曾经在开发form的时候犯过这样一个错误,对于form中的某个字段,对应于数据库中某张表的字段,假设在数据库中这个字段一般也就用到20个汉字的长度,后来我在开发form的时候,设置item类型 ...
- Python 实例3—三级菜单
老男孩培训学习: ''' Author:Ranxf ''' menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} } ...
- python单元测试框架——pytest
官网:https://docs.pytest.org/en/latest/ pytest帮你写出更好的程序 1.An example of a simple test:(一个简单的例子),命名为tes ...
- Docker 的一些使用心得
Docker 的使用心得 预备知识·必备· bash(bsd) Net ,ip know hot to search in Google and Baidu 安装 一般找一个不错的网络环境...不然玩 ...