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: ...
随机推荐
- Shiro起步
1.测试环境 IntelliJ Idea 2.pom配置 <?xml version="1.0" encoding="UTF-8"?> <p ...
- SVM数学原理推导&鸢尾花实例
//看了多少遍SVM的数学原理讲解,就是不懂,对偶形式推导也是不懂,看来我真的是不太适合学数学啊,这是面试前最后一次认真的看,并且使用了sklearn包中的SVM来进行实现了一个鸢尾花分类的实例,进行 ...
- [golang note] 匿名组合
匿名组合 golang也提供了继承机制,但采用组合的文法,因此称为匿名组合.与其他语言不同, golang很清晰地展示出类的内存布局是怎样的. • 非指针方式组合 ▶ 基本语法 // 基类 type ...
- Selenium-IDE,Selenium-RC ,Selenium grid以及 Selenium-Core
Selenium-IDE,Selenium-RC ,Selenium grid 以及 Selenium-Core Selenium 是一种 Web 应用的自动测试工具,通过模拟用户对 Web 页面的各 ...
- dubbo总结
一 .Dubbo产生背景 单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键. 垂直应用架构当访 ...
- 『NiFi 自定义 Processor 无法获取到 Logger』问题解决
一.概述 自定义的 Processor 继承了 AbstractProcessor,而 AbstractProcessor 继承了 AbstractSessionFactoryProcessor ,g ...
- php面向对象类中常用的魔术方法
php面向对象类中常用的魔术方法 1.__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例: //__construct( ...
- Django学习笔记之Web框架由浅入深和第一个Django实例
Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...
- [HAOI2017模拟]百步穿杨
今天的考试题. 考试的时候因为以前做过还写过题解,然后就以为模型已经很清楚了,然后就开始直接推.最后因为蜜汁自信一定能推出来,然后模型搞错了,只能交个暴力上去,于是这场考试GG. 第一次碰上这道题是在 ...
- 20145335郝昊《Java程序设计》第2周学习总结
20145335郝昊<Java程序设计>第2周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long整 ...