SQL最简单使用(三)ORMLite框架

       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;
    }


}
 
未完。。。


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值