开篇:相信大家在android开发过程中大多数项目都需要使用android的数据库sqllite,但是每次直接利用android提供的api来增删改查数据表有点繁琐,做javaweb的都知道有一款数据库框架叫Hibernate ,android端同样有类似这样的框架,下面就给大家介绍这款框架ormlite的使用。orm就是对象关系映射的意思,就是讲关系性质的数据表转化成java的的对象来操作,极大的符合我们java开发人员的思维模式,也免去了不少重复性的代码编写。
1.下载所需jar包
到http://ormlite.com/releases/ 该网站下载所需jar包,android端使用需要下载以下两个jar包(红框圈出来的),一个是ormlite-core-5.0.jar(该包是ormlite的核心代码包),一个是ormlite-android-5.0.jar(该包是在android工程中所需的jar包,如果在普通java工程或者javaweb工程中则使用核心包和另一个jar包ormlite-jdbc-5.0.jar)。
package com.example.androidormlitedemo;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
//用注解标示该类和表user来映射,如果不写tableName则会默认用该类的类名来当做表名。
@DatabaseTable(tableName="user")
public class UserBean {
//用注解标示字段和表中的字段来对应,id=true表示该字段为主键。
@DatabaseField(id=true)
private int uid;
//普通字段则不用写括号
@DatabaseField
private String uname;
@DatabaseField
private int age;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.example.androidormlitedemo;
import java.sql.SQLException;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
// 数据库名称,会在程序的目录中生成test_db.db数据库文件
public static String DATABASE_NAME = "test_db";
// 数据库version
private static final int DATABASE_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public DatabaseHelper(Context context, String databaseName, CursorFactory factory, int databaseVersion) {
super(context, databaseName, factory, databaseVersion);
}
// 初次运行程序会执行该onCreate方法,如果不是初次运行程序则不会执行该方法,防止重复建表。
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
//建立User表
TableUtils.createTable(connectionSource, UserBean.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
//如果不是初次运行并且DATABASE_VERSION数值增加的时候,则会执行该方法,可以在该方法中删除原来的表并建立新表,在要修改数据表结构的时候使用。
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion) {
try {
TableUtils.dropTable(connectionSource, UserBean.class, true);
onCreate(sqLiteDatabase, connectionSource);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 释放 DAO
*/
@Override
public void close() {
super.close();
}
}
package com.example.androidormlitedemo;
import java.sql.SQLException;
import android.content.Context;
import com.j256.ormlite.android.apptools.OpenHelperManager;
import com.j256.ormlite.dao.Dao;
public class UserDao {
private Dao dao;
public UserDao(Context context) {
DatabaseHelper dbHelper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
try {
dao = dbHelper.getDao(UserBean.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
// 保存一条用户信息
public void savaUser(UserBean bean) {
try {
// 如果表中没有该用户则保存,根据主键是否相同来标示是否是同一用户
dao.createIfNotExists(bean);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//根据id获取用户信息
public UserBean getUserById(int id) {
try {
return dao.queryForId(id);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
}
package com.example.androidormlitedemo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.text);
//模拟创建一个用户信息
UserBean userBean = new UserBean();
userBean.setUid(1);
userBean.setUname("张全蛋");
userBean.setAge(25);
//创建dao 初次使用的时候表会自动创建,根据UserBean的字段映射成表
UserDao userDao = new UserDao(this);
//保存用户到表中
userDao.savaUser(userBean);
//从表中查询信息
UserBean userByfind = userDao.getUserById(1);
//显示查询的用户名
textView.setText(userByfind.getUname());
}
}