ORMLite框架 的使用方法---给你的数据库操作插上翅膀

技术小能手 2018-10-08

android 数据库 string static class void bean update list arraylist

一:首先下载 ORMLite Jar 包

先去 ORMLite官网下载jar包 写博客时,目前最新的,对于Android为:ormlite-android-5.0.jar 和 ormlite-core-5.0.jar ; 
然后分包处理,建议如图所示分包:

b6d88f4eabc93c5c02643758d46c59aa73a2ec86

二:配置Bean类
@DatabaseTable(tableName = "Book")
public class MyBean {

    @DatabaseField(generatedId = true)
    private int id;

    @DatabaseField(columnName = "name")
    public String name;

    @DatabaseField(columnName = "author")
    public String author;

    @DatabaseField(columnName = "price")
    public String price;

    @DatabaseField(columnName = "pages")
    public int pages;


    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public int getPages() {
        return pages;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
三:编写Helper类
public class MyDatabaseHelper extends OrmLiteSqliteOpenHelper {

    public static final String DB_NAME = "BookStore.db";
    public static final int DB_VERSION = 1;


    public MyDatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }


    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
        try {
            TableUtils.createTable(connectionSource, MyBean.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion) {
        System.out.println("MyDatabaseHelper.onUpgrade oldVersion=" + oldVersion + "  newVersion=" + newVersion);
        try {

            switch (oldVersion) {
                case 1:
                    getDao(MyBean.class).executeRaw("alter table Book add column book_type varchar(20)");
                    //在数据库版本1的下一版本,Book表中新添加了 book_type 字段

                case 2:
                   // TableUtils.createTable(connectionSource, MyBean2.class);
                   //在数据库版本2的下一版本,新增加了一张表
                default:
                    break;
            }


            //显然这样处理比较暴力
            //TableUtils.dropTable(connectionSource, MyBean.class, true);
            //onCreate(sqLiteDatabase, connectionSource);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private static MyDatabaseHelper instance;

    /**
     * 单例获取该Helper
     *
     * @param context
     * @return
     */

    public static MyDatabaseHelper getHelper(Context context) {
        if (instance == null) {
            synchronized (MyDatabaseHelper.class) {
                if (instance == null)
                    instance = new MyDatabaseHelper(context);
            }
        }
        return instance;
    }


    private Map<String, Dao> daos = new HashMap<>();

    public synchronized Dao getDao(Class clazz) throws SQLException {
        Dao dao = null;
        String className = clazz.getSimpleName();
        if (daos.containsKey(className)) {
            dao = daos.get(clazz);
        }
        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;
        }
    }


}
四:编写DAO类
1:接口编写:
public interface MyDataImpl {

    void insert(ArrayList<MyBean> beanArrayList);

    void insert(MyBean myBean);

    void update(String name, String price);

    void update2(String columnName, String columnValue);

    void update3(String queryColumnName, String queryColumnValue, String setColumnName, String setColumnValue);


    void delete(String name);

    int deleteAll();


    ArrayList<String> queryPrice(String name);

    String queryAuthor(String name, String price);

    long queryCount();

    ArrayList<MyBean> queryId(int id);

    ArrayList<MyBean> queryAll();


}
public class MyDataDao implements MyDataImpl {
    private MyDatabaseHelper mHelper;
    private Dao<MyBean, Integer> dao;
    private Context mContext;
    private static MyDataDao instance;

    protected MyDataDao(Context context) {
        this.mContext = context;
        try {
            mHelper = MyDatabaseHelper.getHelper(mContext);
            dao = mHelper.getDao(MyBean.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    public static MyDataDao getInstance(Context context) {
        if (instance == null) {
            synchronized (MyDataDao.class) {
                if (instance == null) {
                    instance = new MyDataDao(context);
                }
            }

        }
        return instance;
    }


    @Override
    public void insert(MyBean myBean) {


        try {

            //事务操作
           /* TransactionManager.callInTransaction(mHelper.getConnectionSource(), new Callable<Void>() {
                @Override
                public Void call() throws Exception {
                    return null;
                }
            });*/



            dao.create(myBean);
            //dao.createOrUpdate(myBean);//和上一行的方法效果一样
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    @Override
    public void insert(ArrayList<MyBean> beanArrayList) {
        try {
            dao.create(beanArrayList);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void update(String name, String price) {
        ArrayList<MyBean> list = null;
        try {
            list = (ArrayList<MyBean>) dao.queryForEq("name", name);
            if (list != null) {
                for (MyBean bean : list) {
                    bean.setPrice(price);
                    dao.update(bean);
                    //dao.createOrUpdate(bean);//和上一行的方法效果一样
                }

            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void update2(String columnName, String columnValue) {
        try {
            //下面这两个代码的意思一样
            dao.updateBuilder().updateColumnValue(columnName, columnValue).update();
            //dao.updateRaw("update Book set " + columnName + "=?", new String[]{columnValue});
        } catch (SQLException e) {
            e.printStackTrace();
        }


    }

    @Override
    public void update3(String queryColumnName, String queryColumnValue, String setColumnName, String setColumnValue) {
        try {
            String sql = "update Book set " + setColumnName + "= '" + setColumnValue + "' where " + queryColumnName + "= '" + queryColumnValue + "'";
            System.out.println("MyDataDao.update3 sql=" + sql);
            dao.updateRaw(sql);

            //dao.updateRaw("update Book set price= '33333元' where name= '西游记'");//等价于上面的写法
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void delete(String name) {
        ArrayList<MyBean> list = null;
        try {
            list = (ArrayList<MyBean>) dao.queryForEq("name", name);
            if (list != null) {
                for (MyBean bean : list) {
                    dao.delete(bean);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * @return -1:删除数据异常  0:无数据
     */

    @Override
    public int deleteAll() {
        int number = -1;
        try {
            number = dao.deleteBuilder().delete();//返回删除的数据条数  例如:删除1条数据,返回1,依次类推。

            //dao.deleteBuilder().where().eq("name", "记").reset();//????
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return number;
    }

    @Override
    public ArrayList<String> queryPrice(String name) {
        List<MyBean> list = null;
        ArrayList<String> strings = null;
        try {
            list = dao.queryForEq("name", name);
            if (list != null) {
                strings = new ArrayList<>();
                for (MyBean myBean : list) {
                    strings.add(myBean.getPrice());
                }
                /*for (int i = 0; i < list.size(); i++) {
                    strings.add(list.get(i).getPrice());
                }*/

            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return strings;
    }

    @Override
    public String queryAuthor(String name1, String price1) {
        List<MyBean> list = null;
        String author = "";

        try {
            list = dao.queryBuilder().where().eq("name", name1).and().eq("price", price1).query();//上述相当与:select * from Book where name = name1 and price = price1 ;
            if (list != null) {
                for (MyBean myBean : list) {
                    author = myBean.getAuthor();
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return author;//说明:如果这个 author 是唯一的,可以这样的返回。如果是多个的话,要返回一个ArrayList<String> 类型
    }

    /**
     * @return 表中数据的个数
     */

    @Override
    public long queryCount() {
        long number = 0;
        try {
            number = dao.queryBuilder().countOf();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return number;
    }

    /**
     * @param id 这个id 就是表中,每次插入数据,自己递增的id 字段
     */

    @Override
    public ArrayList<MyBean> queryId(int id) {
        ArrayList<MyBean> list = null;

        try {
            MyBean myBean = dao.queryForId(id);
            if (myBean != null) {
                list = new ArrayList<>();
                list.add(myBean);
            }
            return list;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

    @Override
    public ArrayList<MyBean> queryAll() {
        ArrayList<MyBean> list = null;
        try {
            list = (ArrayList<MyBean>) dao.queryForAll();


            if (list != null) {
                return list;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }


    public boolean delteTables(Context context, String DBname) {
        //?????
        return false;
    }


    /**
     * 这个方法可以的
     */

    public boolean delteDatabases(Context context, String DBname) {
        return context.deleteDatabase(DBname);
    }


}
五:测试
源码下载地址
参考文章:
 ● Android快速开发–使用ORMLite操作数据库
 ●  鸿洋的博客:
 ●  Android ORMLite 框架的入门用法
 ●  Android 快速开发系列 ORMLite 框架最佳实践
 ●  SQL 语法
 ●  SQL UPDATE 语句
 ●  OrmLite 官网
原文发布时间为:2018-10-5
本文来自云栖社区合作伙伴“Android开发中文站”,了解相关信息可以关注“Android开发中文站”。

登录 后评论
下一篇
冒顿单于
8026人浏览
2019-08-28
相关推荐
给Dreamweaver插上Svn的翅膀
392人浏览
2012-08-28 17:04:27
0
0
0
861