ORMLite使用教程

2,618 阅读2分钟

添加依赖

compile 'com.j256.ormlite:ormlite-android:4.48'
compile 'com.google.code.gson:gson:2.8.2'

创建实体类

@DatabaseTable(tableName = "tb_user")
public class User implements Parcelable {

    @DatabaseField(generatedId = true)
    private int id;
    
    @DatabaseField
    private String customId;//客户ID
    
    @DatabaseField(columnName="businessId")
    @SerializedName(value="id", alternate = {"docid","docId"})
    private String businessId;//经纪人ID
    
    @DatabaseField(columnName="customName", dataType=DataType.SERIALZABLE)
    @SerializedName(value="customName", alternate={"name","Name"})
    private ArrayList<String> customNames;//客户姓名
    
    ...
}

说明一下

  • 通过GSON注解@SerializedName(value="xxx"),支持Gson序列化;
  • 通过 @DatabaseTable(tableName = "tb_user")指定表名;
  • 通过 @DatabaseFiled(generatedId = true)指定某字段自动生成;
  • 对于ArrayList序列化对象的支持,需要使用 dataType=DataType.SERIALIZABLE 控制数据库表中字段类型;

继承 OrmLiteSqliteOpenHelper 类

public class DBHelper extends OrmLiteSqliteOpenHelper {

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

    private Dao<User, Integer> userDao = null;
    private static final String DATABASE_NAME = "users.db";
    private static final int DATABASE_VERSION = 1;

    public DBHelper(Context context) {
        this(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public DBHelper(Context context, String databaseName, SQLiteDatabase.CursorFactory factory, int databaseVersion) {
        super(context, databaseName, factory, databaseVersion);
    }

    //数据库的创建
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
        try {
            TableUtils.createTable(connectionSource, User.class);
        } catch (java.sql.SQLException e) {
            e.printStackTrace();
        }
    }

    //版本更新
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion) {
        try {
            TableUtils.dropTable(connectionSource, User.class, true);
            onCreate(sqLiteDatabase, connectionSource);
        } catch (java.sql.SQLException e) {
            e.printStackTrace();
        }
    }


    @Override
    public ConnectionSource getConnectionSource() {
        return super.getConnectionSource();
    }

    @Override
    public void close() {
        super.close();
        for (String key : daos.keySet()) {
            Dao dao = daos.get(key);
            dao = null;
        }
    }

    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) {
            try {
                dao = super.getDao(clazz);
            } catch (java.sql.SQLException e) {
                e.printStackTrace();
            }
            daos.put(className, dao);
        }
        return dao;
    }

    private static DBHelper instance;

    /**
     * 单例获取Helper
     *
     * @param context
     * @return
     */
    public static synchronized DBHelper getHelper(Context context) {
        context = context.getApplicationContext();
        if (instance == null) {
            synchronized (DBHelper.class) {
                if (instance == null)
                    instance = new DBHelper(context);
            }
        }
        return instance;
    }
}
  • 数据库第一次创建:onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource)
  • 数据库版本更新:onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion)

可以看到 User 就是我们的实体类,通过 TableUtils.createTable(connectionSource, User.class),在 onCreate 中完成了对象表的创建。

ORMLite 还提供了 DAO 类,每一个实体对象,都对应着一个 DAO 类,OrmLiteSqliteOpenHelper 类为我们提供了 getDao() ;

在 DAO 中完成增删改查

public class UserBeanDao {
    private static final String TAG = "UserBeanDao";
    private Context context;
    private Dao<User, Integer> userDao;
    private DatabaseHelper helper;

    public UserBeanDao(Context context) {
        this.context = context;
        try {
            helper = DatabaseHelper.getHelper(context);
            userDao = helper.getDao(User.class);
        } catch (SQLiteException e) {
            e.printStackTrace();
        }
    }

    /**
     * 增加一个记录
     *
     * @param user
     */
    public void add(User user) {
        try {
            userDao.create(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    /**
     * 跟新一个记录
     *
     * @param user
     */
    public void update(User user) {
        try {
            userDao.update(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    /**
     * 获取数据库中最新的版本
     *
     * @return
     */
    public User getLastOne() {
        try {
            List<User> users = userDao.queryBuilder().orderBy("id", false).query();
            if (users != null && users.size() > 0) {
                return users.get(0);
            }

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


    /**
     * 根据订单ID查
     *
     * @return
     */
    public User getUserByOderId(String orderId) {
        try {
            List<User> users = userDao.queryBuilder().where().eq("orderId", orderId).and()
                    .eq("flag", 0).query();
            if (users != null && users.size() > 0) {
                return users.get(0);
            }

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

    /**
     * 根据用户ID和经纪人ID查记录
     *
     * @return
     */
    public User getUser(String customID, String businessId) {
        try {
            List<User> users = userDao.queryBuilder().where().eq("customId", customID).and().eq
                    ("businessId", businessId).query();
            if (users != null && users.size() > 0) {
                return users.get(0);
            }

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

    /**
     * 根据经济人ID查询所有的为上传的订单
     *
     * @return
     */
    public List<User> getUser(String businessId) {
        try {
            List<User> users = userDao.queryBuilder().where().eq("businessId", businessId).and()
                    .eq("flag", 0).query();
            if (users != null && users.size() > 0) {
                return users;
            }

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


    /**
     * 获取数据库中所有版本信息
     *
     * @return
     */
    public User getFistOne() {
        try {
            List<User> users = userDao.queryBuilder().orderBy("id", true).query();
            if (users != null && users.size() > 0) {
                return users.get(0);
            }

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