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

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


原创文章,转载请注明出处: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嘛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值