zoukankan      html  css  js  c++  java
  • Android数据库框架-----ORMLite 的基本用法

    ORMLite 是一款非要流行的Android平台上的数据库框架,性能优秀,代码简洁;

    简述: 优点: 1.轻量级;2.使用简单,易上手;3.封装完善;4.文档全面。

             缺点:1.基于反射,效率较低(本人还没有觉得效率低);2.缺少中文翻译文档

    准备工作:

    1. jar包 地址:http://ormlite.com/releases/

    2. 集成方法:把jar包复制到as的libs文件夹下,并且引用jar包即可

     之后创建一个类User,并完成相关配置

    @DatabaseTable(tableName="tb_user")//标明数据库中的一张表,表名tb_user
    public class User {
    
        @DatabaseField(generatedId = true)//generatedId 表示id为主键且自动生成
        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;
        }
    }

    基本的数据库操作

    public class DatabaseHelper extends OrmLiteSqliteOpenHelper  {
    
    
        private static final String TABLE_NAME = "sqlite-test.db";
    
        /**
         * userDao ,每张表对于一个
         */
        private Dao<User, Integer> userDao;
    
        private DatabaseHelper(Context context)
        {
            super(context, TABLE_NAME, null, 2);
        }
        //创建表
        @Override
        public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
            try {
                TableUtils.createTable(connectionSource,User.class);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //更新表
        @Override
        public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {
            try {
                TableUtils.dropTable(connectionSource,User.class,true);//删除操作
                onCreate(sqLiteDatabase, connectionSource);//创建
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        private static DatabaseHelper instance;
    
        public static synchronized DatabaseHelper getHelper(Context context)
        {
            if (instance == null)
            {
                synchronized (DatabaseHelper.class)
                {
                    if (instance == null)
                        instance = new DatabaseHelper(context);
                }
            }
    
            return instance;
        }
    
        /**
         * 获得userDao
         *
         * @return
         * @throws SQLException
         */
        public Dao<User, Integer> getUserDao() throws SQLException
        {
            if (userDao == null)
            {
                userDao = getDao(User.class);
            }
            return userDao;
        }
        //释放资源
        @Override
        public void close() {
            super.close();
        }
    }

    MainActivity.Java

    得到操作对象

     DatabaseHelper helper = DatabaseHelper.getHelper(this);  

    1:添加

     User user= new User("zhangqie"+ni++, "2B青年");
        try {
                helper.getUserDao().create(user);//返回>0则成功
            } catch (SQLException e)
            {
            }

    2:删除

         try
            {
                return helper.getUserDao().deleteById(id);
            } catch (SQLException e)
            {
            }
            return 0;

    3:修改

     User user= new User("zhangqie----android", "2B青年");
    user.setId(1);//修改Id=1的

    try { return helper.getUserDao().update(user); } catch (SQLException e) { } return 0;

    4:查询

         try
             {
                 List<User> users=helper.getUserDao().queryForAll();
            } catch (SQLException e)
            {
            }

    以上的实现方式是基本的使用方式;只有一个类User操作的,万一有多个呢,就不好操作了;

    接下来的这种方式:通过一个DatabaseHelper类就可以完成所有类的数据库操作

    整个DatabaseHelper使用单例只对外公布出一个对象,参考文章:http://www.touchlab.co/2011/10/single-sqlite-connectio

    public class DatabaseHelpers extends OrmLiteSqliteOpenHelper {
    
        private static final String TABLE_NAME = "sqlite-test.db";
    
        private Map<String,Dao> daos=new HashMap<String, Dao>();
    
        public DatabaseHelpers(Context context){
            super(context,TABLE_NAME,null,4);
        }
    
        @Override
        public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
            try {
                TableUtils.createTable(connectionSource, User.class);
                //多个类在此添加即可
                //TableUtils.createTable(connectionSource, Article.class);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {
            try
            {
                TableUtils.dropTable(connectionSource, User.class, true);
                //TableUtils.dropTable(connectionSource,Article.class,true);//多个类在此添加即可
                onCreate(sqLiteDatabase, connectionSource);
            } catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
    
        //整个DatabaseHelper使用单例只对外公布出一个对象,保证app中只存在一个SQLite Connection
        private static DatabaseHelpers instance;
    
        /**
         * 单例获取该Helper
         *
         * @param context
         * @return
         */
        public static synchronized DatabaseHelpers getHelper(Context context)
        {
            context = context.getApplicationContext();
            if (instance == null)
            {
                synchronized (DatabaseHelper.class)
                {
                    if (instance == null)
                        instance = new DatabaseHelpers(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;
            }
        }
    }
                

    我已User为例介绍即可

    用一个UserDao来完成相关操作,多个实体类建立多个  XXDao操作了即可

    public class UserDao {
    
        private Context context;
        //通过此集合和DatabaseHelper的Map集合相对应  Dao中的类 如User 就可以随意变换了
        private Dao<User, Integer> userDaoOpe;
        private DatabaseHelpers helper;
    
        public UserDao(Context context)
        {
            this.context = context;
            try
            {
                helper = DatabaseHelpers.getHelper(context);
                userDaoOpe = helper.getDao(User.class);
            } catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
    
        /**
         * 增加一个用户
         * @param user
         */
        public int add(User user)
        {
            try
            {
               return userDaoOpe.create(user);
            } catch (SQLException e)
            {
                e.printStackTrace();
            }
            return 0;
        }
    
        /**
         * 增加一个用户
         * @param id
         */
        public int delete(int id)
        {
            try
            {
               return userDaoOpe.deleteById(id);
            } catch (SQLException e)
            {
                e.printStackTrace();
            }
             return 0;
        }
        /**
         * 修改
         * @param user
         */
        public int update(User user)
        {
            try
            {
              return   userDaoOpe.update(user);
            } catch (SQLException e)
            {
                e.printStackTrace();
            }
            return 0;
        }
        /**
         * 查询
         */
        public List<User> query()
        {
            try {
                return userDaoOpe.queryForAll();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    
    
        public User get(int id)
        {
            try
            {
                return userDaoOpe.queryForId(id);
            } catch (SQLException e)
            {
                e.printStackTrace();
            }
            return null;
        }
    
    }

    得到操作对象UserDao

    UserDao userDaos=new UserDao(this);

    1:添加

      User u1 = new User("zq"+(ni+=5), "2B青年");
      userDaos.add(u1);

    2:删除

     int is=  userDaos.delete(2);//成功  1  失败 0

    3:修改

       User u2 = new User("张三丰", "老道");
            u2.setId(1);
       userDaos.update(u2);

    4:查询

    List<User> users=userDaos.query();
    String username="";
      for (int i=0;i<users.size();i++){
           username+=+users.get(i).getId()+"-----"+users.get(i).getName()+"
    ";
      }
     textView.setText(username);        

     两种效果差不多,实现方式不同而已,运行效果如下:

           

    由于代码太多,就不一一贴出来了,直接下载源码即可  源码点击下载

     

    上面简单介绍了如何使用ORMLite框架,Android数据库框架-----ORMLite关联表的使用  将对其用法进行深入的介绍。

    不足之处请留言指正!有问题的可以给我留言!谢谢!

  • 相关阅读:
    Vue优化首页加载速度 CDN引入
    vue中前进刷新、后退缓存用户浏览数据和浏览位置的实践
    node.js
    keep-alive前进没有刷新
    移动端ios和安卓input问题
    前端技术原理
    Vue给子组件传值为空
    使用vue开发输入型组件更好的一种解决方式(子组件向父组件传值,基于2.2.0)
    Vue路由参数设置可有可无
    Vue组件的三种调用方式
  • 原文地址:https://www.cnblogs.com/zhangqie/p/7255471.html
Copyright © 2011-2022 走看看