• Android之ORMLite实现数据持久化的简单使用


      Android中内置了sqlite,但是常用的开发语言java是面向对象的,而数据库是关系型的,二者之间的转化每次都很麻烦。(作为程序员,应该学会偷懒)而Java Web开发中有很多orm框架(其实我没学过java web),但是想直接放到Android上用有些麻烦。尝试了一下找Android的orm框架,于是便发现了ORMLite。

      首先到官方网站了解一下ormlite:http://ormlite.com/

      然后下载两个jar包,一个是ormlite-core-4.48.jar,另一个是ormlite-android-4.48.jar。(当然,也可以下载对应文档)下载地址为:http://ormlite.com/releases/

      

      接着做一个简单的操作实现吧(实现对数据库的创表以及增删查改)。

      新建一个工程名为“zhj_ORMLite”,包名为“com.topcsa.zhj_ormlite”,选择SDK版本为14,将ormlite-core-4.48.jar和ormlite-android-4.48.jar添加带项目当中。

      

      创建一个实体类Person,这个类就是需要创建的表。

      代码中的@DatabaseTable 指定类对应的表明,@DatabaseField 对应的字段名

    package com.topcsa.zhj_ormlite;
    
    import com.j256.ormlite.field.DatabaseField;
    import com.j256.ormlite.table.DatabaseTable;
    
    @DatabaseTable(tableName = "tb_Person")
    public class Person {
    
        public Person() {
        }
    
        public Person(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
    
        @DatabaseField(generatedId = true)//generatedId 表示id为主键且自动生成
        private int id;
        @DatabaseField(columnName = "name")
        private String name;
        @DatabaseField(columnName = "age")
        private int age;
    
        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 int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
    }

      

         创建一个database helper类,继承OrmLiteSqliteOpenHelper 实现 onCreate 和 onUpgrade ,这个类类似于 android 的SQLiteOpenHelper方法 ,大家应该知道这个类的作用了,创建删除数据库应该使用TableUtils工具类的方法。

      创建表,我们直接使用ormlite提供的TableUtils.createTable(connectionSource, Person.class);进行创建。

      更新表,使用ormlite提供的TableUtils.dropTable(connectionSource, Person.class, true);进行删除操作。

      

    package com.topcsa.zhj_ormlite;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.util.Log;
    
    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;
    
    public class DBhelper extends OrmLiteSqliteOpenHelper {
    
        private static final String TABLE_NAME = "ormlite.db";
        private static DBhelper instance;
    
        public DBhelper(Context context) {
            super(context, TABLE_NAME, null, 1);
            // TODO Auto-generated constructor stub
        }
    
        /**
         * 单例获取该Helper
         * 
         * @param context
         * @return
         */
        public static synchronized DBhelper getHelper(Context context) {
            if (instance == null) {
                synchronized (DBhelper.class) {
                    if (instance == null)
                        instance = new DBhelper(context);
                }
            }
    
            return instance;
        }
    
        @Override
        public void onCreate(SQLiteDatabase database,
                ConnectionSource connectionSource) {
            try {
                TableUtils.createTable(connectionSource, Person.class);
                Log.d("DBhelper", "创建表成功");
            } catch (java.sql.SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase database,
                ConnectionSource connectionSource, int oldVersion, int newVersion) {
            try {
                TableUtils.dropTable(connectionSource, Person.class, true);
            } catch (java.sql.SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            onCreate(database, connectionSource);
    
        }
    
    }

      创建DAO类,建立PersonDao.java。

      

    package com.topcsa.zhj_ormlite;
    
    import java.sql.SQLException;
    import java.util.List;
    
    import android.content.Context;
    import android.util.Log;
    
    import com.j256.ormlite.dao.Dao;
    
    public class PersonDao {
    
        Context con;
        private DBhelper helper;
        private Dao<Person, Integer> personDao;
    
        // 构造函数
        public PersonDao(Context con) {
            helper = DBhelper.getHelper(con);
            this.con = con;
        }
    
        // 每个表一般我们都会单独写个Dao用于操作
        public Dao<Person, Integer> getPersonDao() throws java.sql.SQLException {
            if (personDao == null) {
                personDao = helper.getDao(Person.class);
            }
            return personDao;
        }
    
        // 根据ID查询
        public Person selectPerson(int i) {
            try {
                Person p = getPersonDao().queryForId(i);
                Log.d("TAG", "查询ID为" + i + "的人为:" + p.getName());
                return p;
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
    
        // 添加某人
        public void addPerson(Person p) {
            try {
                getPersonDao().create(p);
                Log.d("TAG", "添加:" + p.getName());
            } catch (SQLException e) {
            }
        }
    
        // 删除某人
        public void deletePerson(Person p) {
            try {
                Log.d("TAG", "删除ID为" + p.getId() + "的人:" + p.getName());
                getPersonDao().deleteById(p.getId());
    
            } catch (SQLException e) {
            }
        }
    
        // 更新某人
        public void updatePerson(Person p, String name) {
            try {
                Log.d("TAG", "修改数据前姓名为:" + p.getName());
                p.setName(name);
                getPersonDao().update(p);
                Log.d("TAG", "修改数据后姓名为:" + p.getName());
            } catch (SQLException e) {
            }
        }
    
        // 查询所有人
        public List<Person> showPersonAll() {
            try {
                List<Person> list = getPersonDao().queryForAll();
                Log.d("TAG", "查询所有数据条数:" + list.size());
                for (int i = 0; i < list.size(); i++) {
                    Log.d("TAG", "单条数据姓名:" + list.get(i).getName());
                }
                return list;
            } catch (SQLException e) {
            }
            return null;
        }
    
    }

      

      最后,在Activity中具体实现:

    package com.topcsa.zhj_ormlite;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Person p = new Person("赵江", 21);
            PersonDao pdao = new PersonDao(this);
            try {
                pdao.addPerson(p);
                p = new Person("黄秋", 21);
                pdao.addPerson(p);
                p = new Person("何权利", 21);
                pdao.addPerson(p);
                p = new Person("任贵权", 21);
                pdao.addPerson(p);
                p = new Person("涂俊", 21);
                pdao.addPerson(p);
                pdao.showPersonAll();
                System.out
                        .println("-------------------------------天王盖地虎------------------------------");
                Person p1 = pdao.selectPerson(2);
                pdao.updatePerson(p1, "~~~~苏苏~~~~");
                p = pdao.selectPerson(1);
                pdao.deletePerson(p);
                pdao.showPersonAll();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    
    }

    运行结果如下:

  • 相关阅读:
    洛谷 P2766 最长不下降子序列问【dp+最大流】
    洛谷 P3254 圆桌问题【最大流】
    洛谷 P2764 最小路径覆盖问题【匈牙利算法】
    洛谷 P2763 试题库问题【最大流】
    洛谷 P2762 太空飞行计划问题 【最大权闭合子图+最小割】
    洛谷 P2761 软件补丁问题 【spfa】
    洛谷 P2754 星际转移问题【最大流】
    洛谷 P1251 餐巾计划问题【最小费用最大流】
    spoj 371 Boxes【最小费用最大流】
    poj 3680 Intervals【最小费用最大流】
  • 原文地址:https://www.cnblogs.com/scetopcsa/p/4067721.html
Copyright © 2020-2023  润新知