最近学习了ormlite数据库框架,将我了解到的一些简单使用方法记下来。
首先需要下载ormlite的jar包这两个放在libs下面。下载地址自己可以去找找。我等下也会在附件中一起传上来,有需要的可以下载看看。
使用前你需要自己定义一个DBHelper类继承OrmLiteSqliteOpenHelper。里面要添加一个无参构造函数和重写里面的oncreate方法。如下:
<span style="font-size:10px;">public class DBHelper extends OrmLiteSqliteOpenHelper{
private Dao<Book, integer> bookDao = null;
private Dao<Student, integer> studentDao = null;
private Dao<BStudents, integer> bStDao = null;
public DBHelper(Context context){
super(context, "test_db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
// TODO Auto-generated method stub
try {
TableUtils.createTable(arg1, Book.class);
TableUtils.createTable(arg1, Student.class);
TableUtils.createTable(arg1, BStudents.class);
} catch (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
}</span>
oncreate中加入需要创建的表的语句。Book,Student,BStudent是我自己写的实例对象。如果想要建表的话需要自己在构建的对象上添加注释。Book表如下:
<span style="font-size:10px;">@DatabaseTable(tableName = "Book")
public class Book {
@DatabaseField(id = true,columnName = "book_id")
int id;
@DatabaseField(columnName = "book_name")
String name;
@DatabaseField
int size;
//关联Student类(1对多的申明,还需在Student里面声明ForeignCollection)
@DatabaseField(foreign = true ,columnName = "student_id")
Student student;</span>
Student表中申明如下:
<span style="font-size:10px;">@DatabaseTable(tableName = "Student")
public class Student {
@DatabaseField(generatedId=true,columnName = "student_id")
int id;
@DatabaseField(columnName = "student_name")
String name;
@DatabaseField
String sex;
//回应User中的声明,表明一个Student可以对应多个User
@ForeignCollectionField
ForeignCollection<Book> books;<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span></span>
@DatabaseTable加在类名之上,表示创建该表;(tableName = "Student")表示表名为Student,若不加tableName则表名默认与类名相同。@DatabaseField用于标识变量,对应生成数据表中的列(一定要加,不然建表的时候就不会有这列)。常见修饰属性有: id=true(申明该列为主键),generatedId=true(插入数据时主键从0开始自加1),columnName = "student_name"(列名为student_name,若不写则默认为变量名name),foreign = true ,columnName = "student_id"(申明为外键,且关联对应为student_id),throwIfNull=true(该列为非空)。建表注释添加好后,需要初始化构建。有两种方式,一种是继承OrmLiteBaseActivity<DBHelper>(DBHelper是自己建的继承OrmLiteSqliteOpenHelper的类),使用时可以利用getHelper获取DBHelper操作对象进行数据操作,另一种是不继承OrmLiteBaseActivity而继承Activity,那则需要OpenHelperManager.getHelper(this,DBHelper.class)来初始化获得DBHelper的对象。
使用时需要先构造该表的DAO类对象才能进行相应的数据操作。例如Dao<Book, integer> bookDao = getDao(Book.class); (Dao<Book, integer>是因为Book表的主键为integer类型)。得到dao类对象后即可对该表数据进行操作。ORMLite提供了一些简单的接口可供使用:
bookDao.create(T data)//向book表中插入一条数据
delete(T data)//删除一条数据
deleteById(ID id)
//通过id删除
queryForAll()//查询表中所有数据
queryForEq(String fieldName, Object value)
//通过某列的值查询
queryForId(ID id)
//通过id查询
update(T data)
//更新数据
...(更多详情请参考源码以及api文档,后面我也会贴出来)
想要自定义查询或删除的话需要利用queryBuilder()或deleteBuilder()自己编写复杂操作。例如bookDao.deleteBuilder().delete();删除book表中的全部数据(自定义删除语句我也不太会用,实在不行可以先query出自己要删除的对象后再删除那些对象)。自定义查询则可以自己定义复杂查询,例如如下语句:
/**
* 表连接查询
* selece List<Student> from Student_table where student_id in
* (select student_id from User_table where book_name = "2" )
*/
public void queryOneToMany(){
List<Student> list =null;
QueryBuilder<Book, integer> bookQuery = bookDao.queryBuilder();
bookQuery.selectColumns("student_id");
SelectArg bookArg = new SelectArg("2");
try {
bookQuery.where().eq("book_name", bookArg);
QueryBuilder<Student, integer> studentQuery = studentDao.queryBuilder();
studentQuery.where().in("student_id",bookQuery);
list = studentQuery.query();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
查询语句中可以利用where,and,or等方法进行精细查寻:bookD
ao.queryBuilder().orderBy(
"Id"
,
true
).where().eq(
"book_name"
,value).and().eq(
"book_name"
, value1)
.query();
这些只是表面简单操作,深入使用有待后续研究学习。
源码及API说明:点击下载