从无到有看文档-----Android中ORMLite框架入门使用指南(为了小白)

来源:互联网 发布:用友nc java版本 编辑:程序博客网 时间:2024/06/06 22:13

本文会介绍学习框架基本功能的步骤。
更多的是如何根据官方文档提供的内容学习该框架。
高手请留情别打脸。
如果只是想简单的拿过来就用,那么可以移步鸿洋大神的博客。


原创文章,转载请注明出处:http://blog.csdn.net/android_zyf/article/details/61624549

一,下载Jar包

1,打开ORMLite官网(百度搜索即可)

http://ormlite.com/sqlite_java_android_orm.shtml

是不是看不懂?看不懂可以翻译啊~

翻译走起

2,找文档

一般网上的框架,都会提供文档供开发者使用(废话,要不然谁会啊)。
直接就能在当前页面找到文档链接,点进去就开整呗。

入门链接

3,查看文档

看文档都说了,要使用Android应用程序需要两个jar文件

看文档

jar包链接

4,下载jar包

原谅我放荡不羁英文差,截图中的care指的是core(就不改了哈)

开整

二,在工程中使用

1,导入jar包

把两个需要的jar包,放在工程的libs文件夹下。

导入jar包

2,继续文档(配置类)

可以看到文档的第二步叫配置类,这时就已经开始告诉我们如何去使用了。
但是这里的文字描述比较冗长,如果有基本的数据库概念的话,还是可以慢慢的看懂的。
但是后面有个设置类的链接,一般这种情况不要去点,点进去会发现好多内容,在刚开始学习一个框架的时候,是没有必要看的那么细的,我们首先要将该框架最基本的功能实现出来。

这个类就是我们常说的bean类,一般情况下一个bean类就对应着数据库中的一个表结构。
bean类中的属性,就对应表中的列。

配置类

import com.j256.ormlite.field.DatabaseField;import com.j256.ormlite.table.DatabaseTable;@DatabaseTable(tableName ="accounts")//设置表名public class Account {    @DatabaseField(id = true)//设置name字段为主键    private String name;    @DatabaseField    private String password;    public Account(){        // ORMLite需要一个无参数的构造函数    }    public Account(String name, String password) {        this.name = name;        this.password = password;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

3,继续文档(配置DAO)

可能有的小伙伴比较疑惑DAO是什么?也可能有些小伙伴根本不管他是什么,为什么叫DAO,能用就行了。
刚开始的话肯定是后者最好,刚开始学习,还是以出来效果为主,不求甚解也是可以的。
但是如果有精力的话,最好理解理解DAO是什么意思。
这里提供一个网址,感兴趣的可以去了解了解:http://www.ziqiangxuetang.com/design-pattern/data-access-object-pattern.html

在这里,DAO类就是来操作数据库内容的,不同类型的DAO就对应着操作数据库中的不同的表。
图中的connectSource这个参数是哪个,这一路过来也没见过啊。

配置DAO

4,继续文档(代码示例)

带着疑问我们继续往下看,connectSource参数是什么呢?这个创建DAO的代码要写在哪儿呢?还不知道对不对,我们根据浏览文档浏览到那里,是不知道要写在哪儿的,我们只能往下看,看到了有代码示例。

Android链接

三,Android示例

1,Android基础

文档4.1Android基础的内容,就阐述了如何在Android系统下,使用ORMLite框架。
what the xxx,这么一堆,说好的不求甚解呢?(当然推荐还是尝试着看一看)
我们可以看到有个示例项目在线的链接,点进去。

去找代码

2,我好像找到了什么

看看例子怎么写的。

看例子

3,看代码自己写Helper类

很尴尬的是你会发现不止翻译了内容,还把代码也翻译了,所以我们这么看。

译

原

会发现写法与Android提供的SQLiteOpenHelper类差不多,很类似。
下面是一部分简单的实现,对照上图中链接的内容写就能写出来了

import android.content.Context;import android.database.sqlite.SQLiteDatabase;import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;import com.j256.ormlite.dao.Dao;import com.j256.ormlite.support.ConnectionSource;import com.j256.ormlite.table.TableUtils;import java.sql.SQLException;/** * Created by zyf on 2017/3/12. *//*** * 数据库助手类,用于管理数据库的创建和升级。<br />这个类通常也提供其他类使用的DAO。 */public class MyOrmHelper extends OrmLiteSqliteOpenHelper {    /**     * 数据库名字     */    private static final String DB_NAME = "native.db";    /**     * 数据库版本,第一次创建数据库时版本号为1,     * 如果在这里改为2,那么再次初始化helper对象时,版本号就为2了     * 就会执行onUpgrade方法,也可以自己优化将它设为构造方法的参数,动态更改     */    private static final int DB_VERSION = 1;    /**     * 操作表Account的DAO对象<br />     * 泛型中第一个添入的是表存的内容对应的类型,第二个是ID列的类型。<br />     * 如果没有指定ID列,第二个参数可以填Object或Void     */    private Dao<Account, String> accountDao;    /**     * 我们只有一个context对象是需要自己填入的。<br />     * 剩下的不是已经设置好的,就是可以使用默认的。<br />     * 所以我们再定义一个构造方法。     *     * @param context     */    public MyOrmHelper(Context context) {        super(context, DB_NAME, null, DB_VERSION);    }    /**     * 有了上面那个,这个就可以弃用了,注掉或删掉都行。     *     * @param context     * @param databaseName     * @param factory     * @param databaseVersion     */    @Deprecated    public MyOrmHelper(Context context, String databaseName, SQLiteDatabase.CursorFactory factory, int databaseVersion) {        super(context, databaseName, factory, databaseVersion);    }    /**     * 第一次创建时调用     *     * @param sqLiteDatabase   数据库对象     * @param connectionSource 资源连接对象     */    @Override    public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {        //使用ORMLite提供的TableUtils类来创建数据库        try {            TableUtils.createTable(connectionSource, Account.class);        } catch (SQLException e) {            e.printStackTrace();        }    }    /**     * 当版本号增加时,也就是数据库要升级或更新时调用     *     * @param sqLiteDatabase   数据库对象     * @param connectionSource 资源连接对象     * @param i                老版本     * @param i1               新版本     */    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {        try {            //下面方法的内容是文档中的例子            //demo();            //更改表以添加名为“age”的新列            getAccountDao().executeRaw("ALTER TABLE 'accounts' ADD COLUMN age INTEGER;");        } catch (SQLException e) {            e.printStackTrace();        }    }    /**     * 获取操作Account表的DAO对象     * @return     */    public Dao getAccountDao() {        if (accountDao == null) {            try {                accountDao = getDao(Account.class);            } catch (SQLException e) {                e.printStackTrace();            }        }        return accountDao;    }    /**     * 在关闭数据库连接的时候,将DAO对象都制空<br />     * 有助于GC清理缓存     */    @Override    public void close() {        super.close();        accountDao = null;    }    private void demo(){        //删除原来的数据库        //不会保留原数据        TableUtils.dropTable(connectionSource,Account.class,true);        //调用创建方法        onCreate(sqLiteDatabase,connectionSource);    }}

四,使用示例

1,增加数据

create方法是在哪儿看到的呢?如果细心的一步步走过来的话,就能知道create是在三-3中,在示例代码中看到,它创建数据库时就做了添加的操作,我们只不过是把添加的操作拿出来了。
这里需要注意一个问题,如果重复添加name属性相同的数据,会报错,不会蹦是因为异常被catch了,原因是Account类中@DatabaseField(id = true)注解将name属性设为了主键,而在数据库中主键是不可以重复的。

//获得Helper类对象MyOrmHelper myOrmHelper = new MyOrmHelper(getContext());//创建要插入的数据Account account = new Account();account.setName("测试名字"+(anInt++));account.setPassword("测试密码");account.setAge(20);//根据helper对象获得操作Account表的DAO对象Dao dao = myOrmHelper.getAccountDao();dao.create(account);

2,查找数据

在示例代码中并没有查找数据的代码,我们也就不知道应该用什么方法去查。
所以只能继续找文档咯。
文档中肯定提供了查询数据的代码示例,找到就行了。
在4.2的上面,我发现了目录。

去目录

3,目录gogogo

在目录中,很容易就找到了自定义语句生成器,使用一个很简单的查询过程。

//查询所有List<Account> accounts = dao.queryForAll();    for (Account a :accounts) {    Log.e(TAG, "onClick: " + a.getName());}//条件查询QueryBuilder<Account,String > queryBuilder = dao.queryBuilder();//添加where语句queryBuilder.where().eq("age",20).and().eq("name","测试名字4");//这个准备的方法我也没细看是在干什么,这都是在文档中找到的使用方法PreparedQuery<Account> preparedQuery = queryBuilder.prepare();//查询结果List<Account> whereQuery = dao.query(preparedQuery);for (Account a : whereQuery) {    Log.e(TAG, "onClick: "+a.getName());}

剩下的更新删除什么的,小伙伴们就可以自己在文档中找啦。
还有这里是把name设置为主键了,一般不都是主键默认为id,并且自增的吗,这个该怎么设置呢?文档中肯定有啊哈哈哈。
与其去百度搜SRMLite如何更新数据,不如自己去文档中找一下,然后自己记下来或者写个博客啥的,出去装x不也能收获个666嘛。

2 0