Android数据库框架-----ORMLite 的基本用法

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);        

两种效果差不多,实现方式不同而已,运行效果如下:

由于代码太多,就不一一贴出来了,直接下载源码即可  源码点击下载

不足之处请留言指正!有问题的可以给我留言!谢谢!

时间: 2024-10-07 19:06:59

Android数据库框架-----ORMLite 的基本用法的相关文章

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

在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar,放在你项目的libs目录下. 2.编写Bean类 package com.example.ormlite.bean; import java.util.Collection; import com.j256.ormlite.field.DatabaseField; import com.j256.

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

Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的,不是我们三言两语就能解决的,我一直想抽个时间自己再过一遍Sqlite和JDBC的,但是,大家也知道,琐事比较多,我们来说一下数据库的框架吧,事实上市面上,我觉得还可以的数据库框架有两个,ORMLite和GreenDao,我以前做的运动类的应用上,就需要存储大量的运动数据,我们最开始是在本地写数据库的

Android 数据库框架ormlite 使用精要

Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机率. ormlite是什么? 首先可以去它的官网看看www.ormlite.com,它的英文全称是Object Relational Mapping,意思是对象关系映射:如果接触过Java EE开发的,一定知道Java Web开发就有一个类似的数据库映射框架--Hibernate.简单来说,就是我们

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

前面说了OrmLite的基本使用,现在说下更规范的做法以及常用的一些功能. 1.DatabaseHelper package com.example.ormlite.db; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import

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

Android数据库框架--GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 但是对于我个人来说,我可能更加倾向于用GreenDao,所以今天也为大家带来了GreenDao的详细博客,希望大家喜欢,之前也详细介绍了ORM的思想,如果不明白可以先看一下前面的博文,这里就不多赘述了,我们新建一个工程 一.相关介绍 官方网站 : http://greendao

自己动手写Android数据库框架

前言 相信不少开发人员跟我一样,每次都非常烦恼自己写数据库,并且那些数据库语句也经常记不住.当然网上也有非常多非常好的数据库框架,你能够直接拿来用,可是 非常多时候我们的项目.特别是一个小型的Andrond应用原本用到的数据库结构比較简单,不是必需去用那些有点臃肿的框架.当然,即使你用那些框架.当你遇到问题时,你是否也得去改动它?你要改动别人的框架必须的读懂他人的设计代码.所以无论从那个角度出发,你都得掌握简单的数据库操作.那么这篇博客就从简单的数据库操作来学习Android数据库相关知识点.然

【光速使用开源框架系列】数据库框架OrmLite

[关于本系列] 最近看了不少开源框架,网上的资料也非常多,但是我认为了解一个框架最好的方法就是实际使用.本系列博文就是带领大家快速的上手一些常用的开源框架,体会到其作用. 由于作者水平有限,本系列只会描述如何快速的使用框架的基本功能,更多的详细设置大家可以在这些项目的页面上找到. [介绍]: ORMLite是一款辅助开发数据库的框架,可以通过给实体配置标注来快速建立数据表,也可以通过其提供的DAO类中的方法来快速对数据库进行操作,如增删改查等. [项目页面]: http://ormlite.co

Android数据库框架GreenDao封装使用,易理解、易扩展

一.概述 在之前一个项目中,因为涉及到数据库,所以就接触到了ORM框架的GreenDao.后面就去网上大量的搜索下载学习,发现很多都是官网的翻译或者是官网DEMO的简单入门讲解,而且对于小白,也不知道从何下手,最终还是放弃选择了本地sqlite. 时隔不久,GreenDao的应用已经是家常便饭了,于是乎,在上个周末就抽取了些时间对官网的DEMO进行拆解封装,并且完善了功能,尽可能的易于理解和扩展,方便以后直接拿来用. 二.效果图 下图addData/deleteData/changeData/q

LitePal——Android数据库框架完整使用手册

LitePal for Android LitePal是一个开源的Android库,使开发人员使用SQLite数据库非常简单.您无需编写任何SQL语句就可以完成大部分数据库操作,包括创建或升级表,增.删.改.查操作,合计函数等.LitePal的设置也很简单,您只许5分钟就可以将其集成到您的项目中. 现在就开始体验吧! 功能 使用对象关系映射(ORM)模式. 几乎零配置(仅有一个配置文件,属性值还非常少). 自动维护所有数据表(例如,创建,更改或删除表). 支持多数据库 封装了多种API,是开发者