ORMLite是什么?其实就是一种映射框架,将实体类与数据库结合,减少sql语句的使用, 从而来降低我们的出错率。当然映射的优点就是操作简单,但是缺点也是有的。原生的sql执行效率要比这些框架要高。 不过在复杂的数据库操作中还是使用框架比较合适。本人在开发过程中涉及到大量操作数据库的很少,所以对于ORMLite也是做一基本的使用介绍。
第一步:当然是要去下载对应的jar了,ormlite_android_4.48.jar和ormlite_core_4.48.jar(文章结束后会提供相应的jar)AS的朋友可以直接添加依赖
compile 'com.j256.ormlite:ormlite-android:4.48' compile 'com.j256.ormlite:ormlite-core:4.48'
第二部: 有了jar就能愉快的玩耍了,ORMLite不是一种映射框架吗?因此,我们先建实体类以。以下会以Worker类作为实体类进行说明。其实说白了,我们所见的实体类就是一张表,只不过这张表是以类的形式映射的。
package qjdt.iwintrue.com.ormlitedemoapplication; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; /** * Created by zhoukai on 2016/1/29. * 以id为主键,分别有id,name,sex,age四个字段 * */ //创建一张工人表 @DatabaseTable(tableName = "worker") public class Worker { @DatabaseField(generatedId = true) private int id; @DatabaseField(columnName = "name") private String name; @DatabaseField(columnName = "sex") private String sex; @DatabaseField(columnName = "age") private int age; /*@DatabaseField(canBeNull = true, foreign = true, columnName = "salary_id") private Salary salary;*/ //必须有无参构造函数,生成dao的时候使用 public Worker() { } //一系列的set,get方法 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 getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
第三步: 有了表是不是还缺点什么?数据库呗,要是没有数据库,你的表存储在哪儿?所以,我们要建立数据库,以下会以work.db进行说明。
package qjdt.iwintrue.com.ormlitedemoapplication; 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; /** * 创建SqlHelper类继承OrmLiteSqliteOpenHelper,因为OrmLiteSqliteOpenHelper继承SQLiteOpenHelper * 因此以下的操作也是很简单的。 */ public class SqlHelper extends OrmLiteSqliteOpenHelper { /* 和原生操作一样,直接建立只含一个参数的构造,调用super(context, databaseName, factory, databaseVersion); 创建work.db数据库文件 */ private SqlHelper(Context context) { super(context, "work.db", null, 1); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { try { TableUtils.createTable(connectionSource, Worker.class); //创建表,TableUtils只是一个工具类 } catch (SQLException e) { e.printStackTrace(); } } /* 数据库更新操作,还是那个样,删除旧表,添加新表 */ @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) { //看到很多大神都是这样做 try { TableUtils.dropTable(connectionSource, Worker.class,true); onCreate(sqLiteDatabase, connectionSource); } catch (SQLException e) { e.printStackTrace(); } } //创建单例模式,保证只存在一个Connection private static SqlHelper helper; public static SqlHelper instanceHelper(Context context){ if(helper == null){ synchronized (SqlHelper.class){ if(helper == null){ helper= new SqlHelper(context); } } } return helper; } private Dao<Worker,Integer>workerDao; //创建Dao public void getWorkerDao() { try { workerDao= getDao(Worker.class); } catch (SQLException e) { e.printStackTrace(); } } @Override public void close() { super.close(); workerDao = null; } }工具类
/** * Created by zhoukai on 2016/1/29. * 首先说明一下映射框架一般用数据库来操作类,也就是所谓的Dao */ public class WorkDao { private SqlHelper helper = null; private Dao<Worker,Integer> workerDao= null; public WorkDao(Context context) { try { helper = SqlHelper.instanceHelper(context); workerDao= helper.getDao(Worker.class); //获取workerdao } catch (SQLException e) { e.printStackTrace(); } } //有了workerDao我们就能对数据库进行操作了,增 public void insertData(){ Worker worker = new Worker(); worker.setName("ZACH_ZHOU"); worker.setSex("男"); worker.setAge(18); try { workerDao.create(worker); } catch (SQLException e) { e.printStackTrace(); } } //删 public void deleteData(){ try { // workerDao.deleteById(3); 指定id删除数据 Worker worker = new Worker(); worker.setId(4); workerDao.delete(worker); // List<Worker> list = new ArrayList<>(); // for(int i= 1;i<10;i++){ // Worker worker = new Worker(); worker.setId(i); // list.add(worker); // } 指定集合删除 // workerDao.deleteIds() 指定id集合删除数据o // Worker work = new Worker(); // work.setName("ZACH_ZHOU"); // work.setAge(18); // work.setSex("男"); // work.setId(4); // workerDao.delete(work); 删除指定数据,age,name,sex可以不设但是必须指定id,没什么大作用 int delete = workerDao.deleteBuilder().delete(); //全部删除数据 } catch (SQLException e) { e.printStackTrace(); } } //改 public void updataDuata(){ try { workerDao.updateRaw("UPDATE worker set name='周杰伦' where name=?",new String[]{"ZACH_ZHOU"}); //直接执行sql语句更新 // Worker worker = new Worker(); // worker.setAge(20); // worker.setName("周杰伦"); // worker.setSex("男"); // worker.setId(4); // workerDao.update(worker); 更新某条数据 } catch (SQLException e) { e.printStackTrace(); } } //查 public List<Worker> queryData(){ List<Worker> workers = null; try { // Worker worker = new Worker(); // worker.setName("ZACH_ZHOU"); // workers = workerDao.queryForMatching(worker); 匹配name查询 // workerDao.queryForId(6); 按照id查询 // workers = workerDao.queryForAll(); // workers= workerDao.queryBuilder().where().eq("id",6).query(); 按照条件查询 // workers = workerDao.queryBuilder().where().eq("id",7).and().eq("name","ZACH_ZHOU").query(); 查询id为7name为ZACH_ZHOU // Where<Worker, Integer> where = workerDao.queryBuilder().where(); // workers = where.and(where.eq("name","ZACH_ZHOU"),where.eq("id",9)).query(); 查询id为9name为ZACH_ZHOU的数据 // workers = workerDao.queryBuilder().where().between("id",3,10).qruery(); 查询3<=id<=10的数据 workers = workerDao.queryForAll(); } catch (SQLException e) { e.printStackTrace(); } return workers; } }
未完。。。