在Android应用开发中使用ORMLite,ORMLite 数据库是面向对象的数据库。它比 SQLite 等数据库更加方便,可以直接使用方法等来操作。比其他很多的数据库操作都要简单。
首先要下载ORMLite的开发jar包,jar资源包下载主页:http://ormlite.com/releases 。此处使用的是如上图所示的两个 jar 包((1)core列表下的jar包;(2)android列表下的jar包。)。下载好后将其放入 libs 目录下。
其中的 @DatabaseTable(tableName = "xxxx") ,@DatabaseField(columnName = xxxx) 等写法都固定。
下面是其简单的使用:
创建 2 个班级,每个班级有几名学生,存入数据库。再遍历其中一个班级的学生(以打印的方式显示出来),效果如下:
班级类: AClass.java :
package com.android.ormlite;
import com.j256.ormlite.dao.ForeignCollection;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable;
@DatabaseTable(tableName = "classes")
public class AClass {
@DatabaseField(canBeNull = false,id = true)
public int Aclass_id;
@DatabaseField(canBeNull = false, defaultValue = "a class")
public String name;
@ForeignCollectionField(eager = false)
public ForeignCollection<User> users = null;
public AClass(){}
}
User.java :
package com.android.ormlite;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
@DatabaseTable(tableName = "users")
public class User {
public final static String USER_ID = "user_id";
public final static String NAME = "name";
public final static String AGE = "age";
public final static String GENDER = "gender";
public User() {
}
public User(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
// @DatabaseField(generatedId = true)
// public int id;
@DatabaseField(id = true, columnName = USER_ID)
public int user_id;
@DatabaseField(columnName = NAME)
public String name;
@DatabaseField(columnName = AGE)
public int age;
@DatabaseField(columnName = GENDER)
public String gender;
@DatabaseField(canBeNull = false, foreign = true, foreignAutoRefresh = true)
public AClass aclass;
public int getUserId() {
return user_id;
}
public void setUserId(int uid) {
this.user_id = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender(){
return gender;
}
public void setGender(String gender){
this.gender = gender;
}
@Override
public String toString() {
return "user_id:" + user_id + " 姓名:" + name +
" 年龄:" + age + " 性别:" + gender;
}
}
ORMLiteDatabaseHelper 类的写法基本固定,通过 AClass 和 User 两个类也可以看出
ORMLiteDatabaseHelper.java :
package com.android.ormlite;
import java.sql.SQLException;
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 android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
public class ORMLiteDatabaseHelper extends OrmLiteSqliteOpenHelper {
public static ORMLiteDatabaseHelper mDatabaseHelper;
private Dao<User, Integer> mUserDao = null;
private Dao<AClass, Integer> mClassDao = null;
private final static String DataBase_NAME = "ormlite.db";
private final static int DataBase_VERSION = 1;
public ORMLiteDatabaseHelper(Context context, String databaseName, CursorFactory factory, int databaseVersion) {
super(context, databaseName, factory, databaseVersion);
}
public static ORMLiteDatabaseHelper getInstance(Context context) {
if (mDatabaseHelper == null) {
mDatabaseHelper = new ORMLiteDatabaseHelper(context, DataBase_NAME,
null, DataBase_VERSION);
}
return mDatabaseHelper;
}
@Override
public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
try {
TableUtils.createTableIfNotExists(connectionSource, AClass.class);
TableUtils.createTableIfNotExists(connectionSource, User.class);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2, int arg3) {
}
/**
* ORMLite查插删改主要通过DAO。
* @return
*/
public Dao<User, Integer> getUserDao() {
if (mUserDao == null) {
try {
mUserDao = getDao(User.class);
} catch (java.sql.SQLException e) {
e.printStackTrace();
}
}
return mUserDao;
}
public Dao<AClass, Integer> getAClassDao(){
if (mClassDao == null) {
try {
mClassDao = getDao(AClass.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
return mClassDao;
}
@Override
public void close() {
super.close();
mUserDao = null;
mClassDao = null;
}
}
MainActivity.java :
package com.android.ormlite;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.ForeignCollection;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
public class MainActivity extends Activity {
private Dao<User, Integer> mUserDao;
private Dao<AClass, Integer> mClassDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ORMLiteDatabaseHelper mDatabaseHelper = ORMLiteDatabaseHelper.getInstance(this);
mUserDao = mDatabaseHelper.getUserDao();
mClassDao = mDatabaseHelper.getAClassDao();
/**
* 创建2个班级
*/
for (int i = 1; i < 3; i++) {
AClass classA = new AClass();
classA.Aclass_id = i;
classA.name = i + "班";
try {
mClassDao.create(classA);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 创建5个user
*/
for (int i = 0; i < 5; i++) {
User user = new User();
user.setUserId(i);
user.setName("name" + i);
// 生成随机测试的年龄。
user.setAge((int) (Math.random() * 22));
user.setGender("男" + i);
try {
// 将新创建的这些 user 所在班级指针指向1班。
user.aclass = mClassDao.queryForId(1);
mUserDao.createOrUpdate(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
@Override
protected void onStart() {
super.onStart();
AClass class1 = null;
try {
// 只查询一个班级的 user
class1 = mClassDao.queryForId(1);
ForeignCollection<User> users = class1.users;
for (User u : users) {
Log.d("==============", u + "");
// Toast.makeText(this, u.toString(),
// Toast.LENGTH_SHORT).show();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}