OrmLite数据库框架的集成及使用

因项目要用使用到数据库来存放一些数据,使用SQLite时来做则显得比较麻烦,后来就选择封装OrmLite来做为数据库的框架.

第一步:集成jar包到项目
到官网http://ormlite.com/releases/去下载相应的core和android一共两个jar文件集成到项目.

第二步:创建相应javaBean,类 Article代码如下:
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
/**
 *  ormlite是通过注解方式配置该类的持久化参数,其中常用参数如下:
     1.表名:不指定的话表名就是类名.
     @DatabaseTable(tableName="dataTableName")

     2.字段:这个可以配置的属性有点多.
     @DatabaseField
     (1)主键:
     @DatabaseField(id=true)
     (2)列名: 不指定的话就是和变量名一样的
     @DatabaseField(columnName="columnName")
     (3) 数据类型: 这个一般情况下都不用指定,可以根据java 类获得
     @DatabaseField(dataType=DataType.INTEGER)
     (4) 默认值:
     @DatabaseField(defaultValue="0")
     (5)长度:一般用于String     @DatabaseField(width=13)
     (6) 能否为空:默认为True
     @DatabaseField(canBeNull=false)
 */
@DatabaseTable(tableName = "article")//声明表名为"article"
public class Article {

    @DatabaseField(id=true)//设定主键,在使用类place等方式会使用到,他会跟所主键来判定是insert还是update
    private int aid;
    @DatabaseField(columnName = "title")//不指定的就表示以此名称为表中的列名
    private String title;
    @DatabaseField()
    private String content;
    @DatabaseField()
    private String date;
    public Article(){//需要提供一个无参的构造方法
  }
    public Article(int aid, String title, String content, String date) {
        this.aid = aid;
        this.title = title;
        this.content = content;
        this.date = date;
    }

    public int getAid() {
        return aid;
    }

    public void setAid(int aid) {
        this.aid = aid;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }
}
 
 
第三步:创建DatabaseHelper类,代码如下:
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;

import java.sql.SQLException;

/**
 * Created by lww on 2016/5/10
 */
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

    public DatabaseHelper(Context context) {
        this(context,"test.db",null,1);
    }

    public DatabaseHelper(Context context, String databaseName, SQLiteDatabase.CursorFactory factory, int databaseVersion) {
        super(context, databaseName, factory, databaseVersion);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {//建表
    try {
            TableUtils.createTable(connectionSource, Article.class);//此处创表
            LogUtil.i("创建数据库成功");
        } catch (SQLException e) {
            e.printStackTrace();
            LogUtil.e("创建数据库失败:" + e);
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion) {//版本升级时的处理
    try {
            TableUtils.dropTable(connectionSource, Article.class, true);
            onCreate(sqLiteDatabase, connectionSource);
            LogUtil.i("更新数据库成功");
        } catch (SQLException e) {
            e.printStackTrace();
            LogUtil.i("更新数据库失败:"+e);
        }
    }
}
第四步:创建相关的DAO类ArticleDao,代码如下:
import android.content.Context;

import com.j256.ormlite.android.apptools.OpenHelperManager;
import com.j256.ormlite.dao.Dao;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
  * 数据库的操作类,常用操作的demo :insert delete update query replace
 */
public class ArticleDao {

    private DatabaseHelper dataHelper;

    public ArticleDao(Context context){
        if (dataHelper == null) {
            dataHelper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
        }
    }

    public void releaseHelper(){
        if (dataHelper != null) {
            OpenHelperManager.releaseHelper();
            dataHelper = null;
        }
    }

    public boolean insert(Article article){//插入单个对象
    int position=-1;
        try {
            position=dataHelper.getDao(Article.class).create(article);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return position>-1;
    }

    public void insert(List<Article> articles){//插入一组对象
     for (Article article : articles) {
            try {
                dataHelper.getDao(Article.class).create(article);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public void deleteByID(int id){
        try {
            Dao<Article, Integer> dao = dataHelper.getDao(Article.class);
            dao.deleteById(id);
//            dao.delete(article) 或者删除单个对象,也根据id来删的
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void update(Article article){
        try {
            dataHelper.getDao(Article.class).update(article);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void replace(Article article){
        try {
            dataHelper.getDao(Article.class).createOrUpdate(article);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public List<Article> queryAll(){//查询全部
    try {
            return dataHelper.getDao(Article.class).queryForAll();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
public List<Article> queryByMap(Map<String,Object> map){
        try {
            return dataHelper.getDao(Article.class).queryForFieldValues(map);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 或上面的方法不能满足需求,可以获取database来执行相关的操作
     *
     * @param sql
     * @param bindArgs
     */
    public void exeSQL(String sql, Object[] bindArgs){
        dataHelper.getWritableDatabase().execSQL(sql,bindArgs);
    }

}
经由以上四步就可以在Activity中使用了,测试代码如下:
**
 * 测试 ORMLite数据库框架
 */
private void databaseTest() {
    ArticleDao articleDao = new ArticleDao(this);
    articleDao.insert(new Article(401,"title","content","data"));
    articleDao.insert(new Article(402,"title","content","data"));
    articleDao.insert(new Article(403,"title3","content3","data3"));
    articleDao.insert(new Article(404,"title4","content4","data4"));

    articleDao.deleteByID(402);
    articleDao.update(new Article(403,"title3update","content3update","data3update"));

    articleDao.replace(new Article(405,"title5replace","content5replace","data5replace"));
    articleDao.replace(new Article(405,"title5replace","content5replace","data5replace"));

    List<Article> articles = articleDao.queryAll();
    for (Article article:articles){
        LogUtil.i("article:"+article);
    }

    articleDao.releaseHelper();//操作完毕后关闭,不确定可放入Destory中来关闭
}

运行Log如下:
article:Article{aid=401, title='title', content='content', date='data'}
article:Article{aid=403, title='title3update', content='content3update', date='data3update'}
article:Article{aid=404, title='title4', content='content4', date='data4'}
article:Article{aid=405, title='title5replace', content='content5replace', date='data5replace'}

可见使用还算比较方便,由于是基于反射在性能略低于SQLite。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值