本文会介绍学习框架基本功能的步骤。
更多的是如何根据官方文档提供的内容学习该框架。
高手请留情别打脸。
如果只是想简单的拿过来就用,那么可以移步鸿洋大神的博客。
原创文章,转载请注明出处:http://blog.csdn.net/android_zyf/article/details/61624549
一,下载Jar包
1,打开ORMLite官网(百度搜索即可)
http://ormlite.com/sqlite_java_android_orm.shtml
是不是看不懂?看不懂可以翻译啊~
2,找文档
一般网上的框架,都会提供文档供开发者使用(废话,要不然谁会啊)。
直接就能在当前页面找到文档链接,点进去就开整呗。
3,查看文档
看文档都说了,要使用Android应用程序需要两个jar文件
4,下载jar包
原谅我放荡不羁英文差,截图中的care指的是core(就不改了哈)
二,在工程中使用
1,导入jar包
把两个需要的jar包,放在工程的libs文件夹下。
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这个参数是哪个,这一路过来也没见过啊。
4,继续文档(代码示例)
带着疑问我们继续往下看,connectSource参数是什么呢?这个创建DAO的代码要写在哪儿呢?还不知道对不对,我们根据浏览文档浏览到那里,是不知道要写在哪儿的,我们只能往下看,看到了有代码示例。
三,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嘛。