[ 转]Android快速开发–使用ORMLite操作数据库

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文件以及官方文档说明:点击下载

时间: 2024-10-12 17:50:49

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

Android快速开发--使用ORMLite操作数据库

OrmLite是一个数据库操作辅助的开源框架,主要面向Java语言.在Android面向数据库开发中,是一个比较流行的开源框架,方便操作而且功能强大,今天来学习一下,最近的项目中也有所涉及,写个博客来记一下吧,感谢大神团队贡献如此实用的开源框架,这里是OrmLite的官方网址:http://ormlite.com/ 准备工作–创建数据库及数据表 ORMlite通过Java注解的方式来建立起与数据库的映射关系,在这里我们以一个实例来进行说明,如我们现在想要建立一个简单的数据库test.db并创建一

Android 快速开发系列 ORMLite 框架的使用

上一篇已经对ORMLite框架做了简单的介绍:Android ORMLite 框架的入门用法~~本篇将介绍项目可能会使用到的一些用法,也为我们的使用ORMLite框架总结出一个较合理的用法. 通过上一篇的了解,我们使用ORMLite,需要自己写一个DatabaseHelper去继承OrmLiteSqliteOpenHelper,下面我们首先给出一个我认为比较靠谱的Helper的写法: 1.DatabaseHelper package com.zhy.zhy_ormlite.db; import

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

上一篇已经对ORMLite框架做了简单的介绍:Android ORMLite 框架的入门用法~~本篇将介绍项目可能会使用到的一些用法,也为我们的使用ORMLite框架总结出一个较合理的用法. 通过上一篇的了解,我们使用ORMLite,需要自己写一个DatabaseHelper去继承OrmLiteSqliteOpenHelper,下面我们首先给出一个我认为比较靠谱的Helper的写法: 1.DatabaseHelper [java] view plaincopy package com.zhy.z

UltimateAndroid快速开发框架简介与教程(也是一套Android快速开发的教程)

UltimateAndroid是一套集成了许多现有优秀的Android开源类库并将之组合成一个整体的Android快速开发框架. github地址:https://github.com/cymcsg/UltimateAndroid 框架目前主要包含的功能有View Injection,ORM,异步网络请求和图片加载,自动化脚本测试,磁盘LRU等功能.同时提供了类似于TripleDes.Webview快速设置.Md5处理.String处理,Https处理等常用工具类,还有多种UI控件效果.并且这些

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

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写得最多的就是ListView,GridView的适配器吧,记得以前开发一同事开发项目,一个项目下来基本就一直在写ListView的Adapter都快吐了~~~对于Adapter一般都继承BaseAdapter复写几个方法,getView里面使用ViewHolder模式,其实大部分的代码基本都是类似的

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

Android快速开发不可或缺的11个辅助类,其中10个来自张鸿洋的博客,1个是我平时积攒的,复制粘贴到你的项目里,添加上包名就可以直接使用,能提高开发速度. 下载地址:http://www.dwz.cn/AHL17 包含文件:

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

功能分类:工具     支持平台:Android     运行环境:Eclipse 开发语言:Java      开发工具:Eclipse         源码大小:11.45KB 下载地址:http://sina.lt/zx9   源码简介 Android快速开发不可或缺的11个辅助类,其中10个来自张鸿洋的博客,1个是我平时积攒的,复制粘贴到你的项目里,添加上包名就可以直接使用,能提高开发速度.

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

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自[张鸿洋的博客] 打开大家手上的项目,基本都会有一大批的辅助类,今天特此整理出10个基本每个项目中都会使用的工具类,用于快速开发~~ 在此感谢群里给我发项目中工具类的兄弟/姐妹~ 1.日志工具类L.java [java] view plaincopyprint? package com.zhy.utils; import android.util.Log;

【转】 Android快速开发系列 10个常用工具类 -- 不错

原文网址:http://blog.csdn.net/lmj623565791/article/details/38965311 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自[张鸿洋的博客] 打开大家手上的项目,基本都会有一大批的辅助类,今天特此整理出10个基本每个项目中都会使用的工具类,用于快速开发~~ 在此感谢群里给我发项目中工具类的兄弟/姐妹~ 1.日志工具类L.java [java] view