ORMLite 是一款非要流行的Android平台上的数据库框架,性能优秀,代码简洁;

简述: 优点: 1.轻量级;2.使用简单,易上手;3.封装完善;4.文档全面。

缺点:1.基于反射,效率较低(本人还没有觉得效率低);2.缺少中文翻译文档

准备工作:

  1. jar包 地址:http://ormlite.com/releases/

  2. 集成方法:把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 的基本用法的更多相关文章

  1. Android数据库框架-----ORMLite关联表的使用

    上一篇已经对ORMLite框架做了简单的介绍:Android数据库框架-----ORMLite 的基本用法~~本篇将介绍项目可能会使用到的一些用法,也为我们的使用ORMLite框架总结出一个较合理的用 ...

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

    在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar ...

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

    Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...

  4. Android 数据库框架ormlite

    Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机 ...

  5. Android数据库框架-ORMLite

    参考资料 Android ORMLite 框架的入门用法 Android 快速开发系列 ORMLite 框架最佳实践 添加依赖 compile 'com.j256.ormlite:ormlite-an ...

  6. Android 数据库框架OrmLite的使用(二)

    前面说了OrmLite的基本使用,现在说下更规范的做法以及常用的一些功能. 1.DatabaseHelper package com.example.ormlite.db; import java.s ...

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

    Android数据库框架--GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架--ORMLite轻量级的对象关系映射 ...

  8. Android 数据库框架总结(转)

    转自 http://blog.csdn.net/da_caoyuan/article/details/61414626 一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完 ...

  9. Android 数据库框架总结,总有一个适合你!

    一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面.缺点:1.基于反射,效率较低(本人还没有觉得效率低):2.缺少中文翻译文档 jar包 地址:http: ...

随机推荐

  1. win8.1 设置默认输入法为英文

    win8.1中文版 输入法默认为微软拼音且为中文,此事在使用类似cmd就很不方便了,这里我们只需要将输入法设置为 “允许我为每个应用窗口设置不同的输入法”即可,操作如下:

  2. Spring自动装配Bean的五种方式

    在Spring中,支持 5 自动装配模式. no – 缺省情况下,自动配置是通过“ref”属性手动设定,在项目中最常用byName – 根据属性名称自动装配.如果一个bean的名称和其他bean属性的 ...

  3. html-4, form 表单 输入、传文件、单选、多选、下拉菜单、文本描述、重置、submit、按钮限制输入

    <!-- form HTTP协议 action:提交的服务器网址 method:get(默认)| post(应用:登录注册.上传文件) 页面中的a img link 默认是get请求 input ...

  4. ACM-ICPC 2018 南京赛区网络预赛 - J. Sum (找规律+打表)

    题意:\(f(i):i\)能拆分成两个数的乘积,且要求这两个数中各自都没有出现超过1次的质因子.每次给出n,求\(\sum_{i=1}^{n}f(i)\) 分析:\(1 \le n \le 2e7\) ...

  5. TOSCA自动测试工具跟QTP 和 Selenium的简单对比

    1. 一个课程里的,可以做个简单的参考,有些地方不是很准确

  6. Pyspark访问Hbase

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl/p/7347167.html 转载请注明出处 记录自己最近抽空折腾虚拟机环境时用spark2.0的pyspark ...

  7. 验证url格式

    //验证url var url=$("#address").val(); var regUrl = /^http[s]{0,1}:\/\/.+$/ ; if(url.match(r ...

  8. SQL学习笔记之简易ORM

    0x00 前言 1 .我在实例化一个user对象的时候,可以user=User(name='lqz',password='123') 2 .也可以 user=User() user['name']=' ...

  9. 如何安装python .whl包

    1.最简单的办法是是python -mpip install *** 配置过环境变量也可以 pip install *** 但是由于墙的原因,很大概率失败.可以找到对应网站下载对应的.whl 2.下载 ...

  10. 20145321 《Java程序设计》第6周学习总结

    20145321 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入输出 10.1 InputStream OutputStream 1.数据有来源与目的,衔接两者的是串流 ...