下面开始介绍ORMLite的入门用法~
1、下载 ORMLite Jar
首先去 ORMLite官网下载jar包,对于Android为:ormlite-android-4.48.jar 和 ormlite-core-4.48.jar ;
2、配置Bean类
有了jar,我们直接新建一个项目为:zhy_ormlite,然后把jar拷贝到libs下。
然后新建一个包:com.zhy.zhy_ormlite.bean专门用于存放项目中的Bean,首先新建一个User.java
package com.zhy.zhy_ormlite.bean; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; @DatabaseTable(tableName = "tb_user") public class User { @DatabaseField(generatedId = true) private int id; @DatabaseField(columnName = "name") private String name; @DatabaseField(columnName = "desc") private String desc; public User() { } public User(String name, String desc) { this.name = name; this.desc = desc; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } }
首先在User类上添加 @DatabaseTable(tableName = "tb_user"),标明这是数据库中的一张表,标明为tb_user
然后分别在属性上添加 @DatabaseField(columnName = "name") ,columnName的值为该字段在数据中的列名
@DatabaseField(generatedId = true) ,generatedId 表示id为主键且自动生成
3、编写DAO类
原生的数据库操作,需要继承 SQLiteOpenHelper,这里我们需要继承 OrmLiteSqliteOpenHelper,看代码:
package com.zhy.zhy_ormlite.db; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; 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 com.zhy.zhy_ormlite.bean.Article; import com.zhy.zhy_ormlite.bean.Student; import com.zhy.zhy_ormlite.bean.User; public class DatabaseHelper extends OrmLiteSqliteOpenHelper { private static final String TABLE_NAME = "sqlite-test.db"; private Map<String, Dao> daos = new HashMap<String, Dao>(); private DatabaseHelper(Context context) { super(context, TABLE_NAME, null, 4); } @Override public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, User.class); TableUtils.createTable(connectionSource, Article.class); TableUtils.createTable(connectionSource, Student.class); } catch (SQLException e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) { try { TableUtils.dropTable(connectionSource, User.class, true); TableUtils.dropTable(connectionSource, Article.class, true); TableUtils.dropTable(connectionSource, Student.class, true); onCreate(database, connectionSource); } catch (SQLException e) { e.printStackTrace(); } } private static DatabaseHelper instance; /** * 单例获取该Helper * * @param context * @return */ public static synchronized DatabaseHelper getHelper(Context context) { context = context.getApplicationContext(); if (instance == null) { synchronized (DatabaseHelper.class) { if (instance == null) instance = new DatabaseHelper(context); } } return instance; } public synchronized Dao getDao(Class clazz) throws SQLException { Dao dao = null; String className = clazz.getSimpleName(); if (daos.containsKey(className)) { dao = daos.get(className); } if (dao == null) { dao = super.getDao(clazz); daos.put(className, dao); } return dao; } /** * 释放资源 */ @Override public void close() { super.close(); for (String key : daos.keySet()) { Dao dao = daos.get(key); dao = null; } } }
1、整个DatabaseHelper使用单例只对外公布出一个对象, 保证app中只存在一个SQLite Connection
2、我们对每个Bean创建一个XXXDao来处理当前Bean的数据库操作,当然真正去和数据库打交道的对象,通过上面代码中的getDao(T t)进行获取
getDao为一个泛型方法,会根据传入Class对象进行创建Dao,并且使用一个Map来保持所有的Dao对象,只有第一次调用时才会去调用底层的getDao()。
4、Bean的Dao
package com.zhy.zhy_ormlite.db; import java.sql.SQLException; import android.content.Context; import com.j256.ormlite.dao.Dao; import com.zhy.zhy_ormlite.bean.User; public class UserDao { private Context context; private Dao<User, Integer> userDaoOpe; private DatabaseHelper helper; public UserDao(Context context) { this.context = context; try { helper = DatabaseHelper.getHelper(context); userDaoOpe = helper.getDao(User.class); } catch (SQLException e) { e.printStackTrace(); } } /** * 增加一个用户 * @param user */ public void add(User user) { try { userDaoOpe.create(user); } catch (SQLException e) { e.printStackTrace(); } }//...other operations }
5.事务操作
//事务操作 TransactionManager.callInTransaction(helper.getConnectionSource(), new Callable<Void>() { @Override public Void call() throws Exception { return null; } });
ORMLite下载地址: http://ormlite.com/releases/
转自: http://blog.csdn.net/lmj623565791/article/details/39122981