OrmLite是一个数据库操作辅助的开源框架,主要面向Java语言。在Android面向数据库开发中,是一个比较流行的开源框架,方便操作而且功能强大,今天来学习一下,最近的项目中也有所涉及,写个博客来记一下吧,感谢大神团队贡献如此实用的开源框架,这里是OrmLite的官方网址:http://ormlite.com/

准备工作–创建数据库及数据表

ORMlite通过Java注解的方式来建立起与数据库的映射关系,在这里我们以一个实例来进行说明,如我们现在想要建立一个简单的数据库test.db并创建一张表person来记录一个人的名字,年龄,住址等等。

创建Bean类

首先,建立我们的Bean类Person,并通过注解的方式与数据库联系起来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@DatabaseTable(tableName = "person")
public class Person {
 
    @DatabaseField(generatedId=true)
    private int id;
    @DatabaseField(columnName="name")
    private String name;
    @DatabaseField(columnName="age")
    private int age;
    @DatabaseField(columnName="address")
    private String address;
    /**
     * @return the id
     */
    public int getId() {
        return id;
    }
    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @return the age
     */
    public int getAge() {
        return age;
    }
    /**
     * @param age the age to set
     */
    public void setAge(int age) {
        this.age = age;
    }
    /**
     * @return the address
     */
    public String getAddress() {
        return address;
    }
    /**
     * @param address the address to set
     */
    public void setAddress(String address) {
        this.address = address;
    }
 
}

在这里我们创建了Bean类,并与数据库建立了联系,有两件事是我们需要做的
1.需要在@DatabaseTable注解中填入表名
2.在@DatabaseField(columnName=”“)填入字段名,设置字段的属性等等

字段属性说明

ORMLite为我们提供了全面的字段属性的支持,下面我们来具体看一下吧:

  • cloumnName:指定字段名,不指定则变量名作为字段名
  • canBeNull:是否可以为null
  • dataType:指定字段的类型
  • foreign 指定这个字段的对象是一个外键,外键值是这个对象的id
  • foreignAutoCreate 外键不存在时是否自动添加到外间表中
  • foreignAutoRefresh 外键值,自动刷新
  • foreignColumnName外键字段指定的外键表中的哪个字段
  • generatedId:指定字段为自增长的id,不能id,generatedIdSequence通用
  • id:指定字段为id
  • index:索引
  • persisted:指定是否持久化此变量,默认true
  • throwIfNull,如果空值抛出异常
  • useGetSet:指定ormlite访问变量使用set,get方法默认使用的是反射机制直接访问变量
  • unique:字段值唯一
  • uniqueIndex 唯一索引
  • uniqueCombo整列的值唯一

创建数据库

与Android中的数据库创建相似,使用OrmLite创建数据库需要我们创建一个SqlOpenHelper继承OrmLiteSqliteOpenHelper,在OrmLiteSqliteOpenHelper也有两个重要方法,分别是onCreate和onUpgrade,负责数据库创建以及升级时的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class MySqlOpenHelper extends OrmLiteSqliteOpenHelper {
 
    private Dao<Person, Integer> mPersonDao;
 
    public MySqlOpenHelper(Context context) {
        super(context, "test"null1);
        // TODO Auto-generated constructor stub
    }
 
    @Override
    public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
        // TODO Auto-generated method stub
        try {
            //创建数据表
            TableUtils.createTableIfNotExists(arg1, Person.class);
        catch (java.sql.SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2,
            int arg3) {
        // TODO Auto-generated method stub
 
    }
 
    public Dao<Person, Integer> getPersonDao() throws java.sql.SQLException {
        if (mPersonDao == null) {
            mPersonDao = getDao(Person.class);
        }
        return mPersonDao;
    }
 
}

Dao是一个很重要的类, 这些Dao对象用于以后的数据库操作,其包含两个泛型,第一个泛型表DAO操作的类,第二个是标记数据表的ID。

数据库操作

创建了我们自己的数据库之后就可以来,对数据库操作了,接下来我们看看如何进行数据库的增删查改

插入操作

这些方法使用起来都比较简单,我们只需将自己的Bean传入到下列方法中即可

  • create:插入一条数据
  • createIfNotExists:如果不存在则插入
  • createOrUpdate:如果存在则更新

查询操作

OrmLite为我提供了一系列的查询操作,方法很多,而且很多都是只看方法名就可以知道的,这里就不逐一介绍了,在这里介绍一下如何使用QueryBuilder进行复杂查找。

  • 首先调用personDao.queryBuilder();获得该Dao下的QueryBuilder对象,
  • 接下来设置QueryBuilder的查询条件,
  • 最后通过QueryBuilder的query方法获得List对象,

下面介绍几个常用的builder下的查询,
1.多字段条件查询:

1
2
3
QueryBuilder builder = dao.queryBuilder();
builder.where().eq("字段名1","条件1").and.eq(""字段名2","条件2");
builder.query();

2.查询并按顺序输出

1
2
3
QueryBuilder<Person, Integer> builder = dao.queryBuilder();
builder.orderBy("字段名"true);
builder.query();

orderBy的方法第一参数表示按那个字段进行排序,第二个参数表示是否为升序。

3.分页查询

1
2
3
4
QueryBuilder<Person, Integer> builder = dao.queryBuilder();
builder.offset(10);//表示查询的起始位置
builder.limit(10);//表示总共获取的对象数量
builder.query();

删除和更改操作

与查询操作类似,ORMLite同样为我们提供了一系列的方法,同时也提供了复杂删除,复杂更改的DeleteBuilder和UpdateBuilder,其用法与QueryBuilder相似,就不详细介绍了。

将数据库放置在SD卡

Android创建数据库默认的存储路径是在/data/data/packagename/database 目录之下,一方面如果数据库庞大将占用系统存储空间,另一方面如果没有获得系统ROOT权限,将不能直观的看到该数据库。所以在最后介绍一下如何将数据库建立在指定的SD卡目录之下。

这个在ORMLite中并没有提供,自己来动手写一写吧。阅读一下Android的源码可以很容易发现,Android数据库存放的目录是由ContextWrapper类下的public File getDatabasePath(String name)方法决定的,那么我们只需创建自己的Context覆盖该方法即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class DatabaseContext extends ContextWrapper {
 
    private static final String ROOT_SDCARD = Environment
            .getExternalStorageDirectory().getAbsolutePath();
    private String dbDir;
 
    public DatabaseContext(Context base, String path) {
        super(base);
        dbDir = path;
    }
 
    @Override
    public File getDatabasePath(String name) {
        // 判断是否存在sd卡
        boolean sdExist = android.os.Environment.MEDIA_MOUNTED
                .equals(android.os.Environment.getExternalStorageState());
        if (!sdExist) {// 如果不存在,
            Log.e("Database error""SD卡不存在");
            return null;
        }
 
        // 判断目录是否存在,不存在则创建该目录
        File dirFile = new File(dbDir);
        if (!dirFile.exists())
            dirFile.mkdirs();
 
        // 标记数据库文件是否创建成功
        boolean isFileCreateSuccess = false;
        String dbPath = dbDir + "/" + name;// 数据库路径
        File dbFile = new File(dbPath);
        // 如果数据库文件不存在则创建该文件
        if (!dbFile.exists()) {
            try {
                isFileCreateSuccess = dbFile.createNewFile();// 创建文件
            catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        else
            isFileCreateSuccess = true;
 
        // 返回数据库文件对象
        if (isFileCreateSuccess)
            return dbFile;
        else
            return null;
 
    }
 
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode,
            SQLiteDatabase.CursorFactory factory) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(
                getDatabasePath(name), null);
        return result;
    }
 
    /**
     * Android 4.0会调用此方法获取数据库。
     *
     */
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode,
            CursorFactory factory, DatabaseErrorHandler errorHandler) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(
                getDatabasePath(name), null);
        return result;
    }
}

之后我们在创建SQLOpenHelper时,只需传入我们自己的DatabaseContext 即可,如

1
2
SdCardDBHelper dbHelper = new SdCardDBHelper(new DatabaseContext(
                MainActivity.this, path), "person.db");

ORMLite相关文件下载

附上ORMLite相关jar文件以及官方文档说明:点击下载

[ 转]Android快速开发–使用ORMLite操作数据库的更多相关文章

  1. Android 快速开发系列 ORMLite 框架最佳实践

    比较靠谱的Helper的写法: 1.DatabaseHelper package com.zhy.zhy_ormlite.db; import java.sql.SQLException; impor ...

  2. Android 快速开发系列 ORMLite 框架最佳实践之实现历史记录搜索

    首先在build.gald中添加compile 'com.j256.ormlite:ormlite-android:4.48'的引用 compile 'com.j256.ormlite:ormlite ...

  3. 【转】Android 使用ORMLite 操作数据库

    Android 使用ORMLite 操作数据库   用过ssh,s2sh的肯定不会陌生 ,应该一学就会 第一步: 下载ormlite-android-4.41.jar和ormlite-core-4.4 ...

  4. (转载)实例详解Android快速开发工具类总结

    实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...

  5. Android 快速开发系列 打造万能的ListView GridView 适配器

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...

  6. Android快速开发不可或缺的11个工具类

     Android快速开发不可或缺的11个工具类  :http://www.devst ore.cn/code/info/363.html

  7. Android快速开发不可或缺的11个工具类(下载)

    功能分类:工具     支持平台:Android     运行环境:Eclipse 开发语言:Java      开发工具:Eclipse         源码大小:11.45KB   下载地址:ht ...

  8. Android 使用ORMLite 操作数据库

    参考:http://blog.csdn.net/cjjky/article/details/7096987 ormlite 方法查询:http://ormlite.com/javadoc/ormlit ...

  9. Android快速开发系列 10个常用工具类

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自[张鸿洋的博客] 打开大家手上的项目,基本都会有一大批的辅 ...

随机推荐

  1. dot函数

    dot函数是两个向量的点乘,注意lua中dot函数的写法 th> a [torch.DoubleTensor of size 1x3] [.0002s] th> b [torch.Doub ...

  2. HTTP断点续传的基本原理

    转自:http://blog.csdn.net/sendy888/article/details/1719105 断点续传是我们现在经常接触的概念,那么HTTP协议是如何支持断点续传的呢.我们先从一个 ...

  3. java导出cvs文件

    package testcvs; import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;i ...

  4. centos6.6 设置静态网络

    [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0HWADDR=08:00:27:3D:5F:38 ...

  5. SQLServer: 解决“错误15023:当前数据库中已存在用户或角色

    解决SQL Server 2008 错误15023:当前数据库中已存在用户或角色,SQLServer2008,错误15023, 在使用SQL Server 2008时,我们经常会遇到一个情况:需要把一 ...

  6. 【转载】ODBC, OLEDB, ADO, ADO.Net的演化简史

    原文:ODBC, OLEDB, ADO, ADO.Net的演化简史 1.演变历史 它们是按照这个时间先后的顺序逐步出现的,史前->ODBC->OLEDB->ADO->ADO.N ...

  7. ubuntu Linux 测试PHP却提示下载文件的解决办法

    ubuntu Linux 测试PHP却提示下载文件的解决办法   一般这种情况都是在刚刚开始配置环境时出现的, 输入 sudo a2enmod php5  看提示如果出现“$ This module ...

  8. php中一个"异类"语法: $a && $b = $c;

    php中一个"异类"语法: $a && $b = $c;     $a = 1;$b = 2;$c = 3;$a && $b = $c;echo & ...

  9. Create Stacked Canvas to Scroll Horizontal Tabular Data Blocks In Oracle Forms

    In this tutorial you will learn to create horizontal scrollable tabular or detail data block by usin ...

  10. git sshkeygen Fingerprint cannot be generated解决方法

    ssh-keygen -t rsa -C "xxx@xxx.com"   生成后使用cat或者vim 查看该rsa,然后复制到github的ssh keys中:     提示:   ...