Android中的ORMLite的簡單使用。
1.從官網下載core庫jar包,android上的jar包
下載成功後復制進libs文件夾,同步工程
2.創建一個java類,通過註解,將此java對象和數據庫中的表格關聯起來
@DatabaseTable(tableName = "user") public class User { public User() { } public User(int id, String name, String age, String address) { this.id = id; this.name = name; this.age = age; this.address = address; } @DatabaseField(generatedId = true) private int id; @DatabaseField(columnName = "name") private String name; @DatabaseField(columnName = "age") private String age; @DatabaseField(columnName = "address") private String address; 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 getAge() { return age; } public void setAge(String age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
@DatabaseTable(tableName = “user”) : 代表User類映射到數據庫當中的user表(table) DatabaseField()的”( )”中可以有以下的值
@DatabaseField(generatedId = true) : 代表主鍵自動增長
@DatabaseField(id= true) : 代表此字段是主鍵
@DatabaseField(columnName = “name”) : 代表此字段對應於數據當中的name。
3.創建一個DatabaseHelper類,繼承自OrmLiteSqliteOpenHelper,用來管理數據庫的創建和更新,還可以通過此類獲取數據庫的操作對象
public class DatabaseHelper extends OrmLiteSqliteOpenHelper { private static final String DB_NAME = "ormtest.db"; private static final int DB_VERSION = 1; private Dao userDao; private DatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } private static volatile DatabaseHelper mInstance; /** * 單例模式,獲取DatabaseHelper的唯一實例 * * @param context * @return */ public static DatabaseHelper getInstance(Context context) { if (mInstance == null) { synchronized (DatabaseHelper.class) { if (mInstance == null) { mInstance = new DatabaseHelper(context); } } } return mInstance; } /** * 如果還沒有這個數據庫的時候就會創建數據庫,同時創建表格 * * @param sqLiteDatabase * @param connectionSource */ @Override public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { try { //創建表 TableUtils.createTable(connectionSource, User.class); } catch (SQLException e) { e.printStackTrace(); } } /** * 升級數據庫 * * @param sqLiteDatabase * @param connectionSource * @param i * @param i1 */ @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(); } } /** * 釋放資源 */ @Override public void close() { super.close(); userDao = null; } }
4.在上面的DatabaseHelper創建完成以後,此時我們直接可以獲取到XXDao的對象,就可以進行增(create)刪(delete)改(update)查(query)瞭
DatabaseHelper helper = DatabaseHelper.getInstance(this); try { Dao dao = helper.getDao(User.class); dao.delete(new User());//刪除一條數據 } catch (SQLException e) { e.printStackTrace(); }
但是這裡建議真毒每一張table封裝一個dao,這樣一個dao隻映射數據庫當中的一張表格,例如這裡封裝瞭一個UserDao,裡面包含瞭基本的增、刪、改、查的方法:
public class UserDao { private DatabaseHelper mHelper; private Dao mDao; private static volatile UserDao mUserDao; private UserDao(Context context) { if (mDao == null) { if (mHelper == null) { mHelper = DatabaseHelper.getInstance(context); } try { mDao = mHelper.getDao(User.class); } catch (SQLException e) { e.printStackTrace(); } } } public static UserDao getInstance(Context context) { if (mUserDao == null) { synchronized (UserDao.class) { if (mUserDao == null) { mUserDao = new UserDao(context); } } } return mUserDao; } /** * Create a new row in the database from an object * 創建一條新的記錄到數據庫中 * * @param user * @return 是否插入成功 */ public boolean insert(User user) { boolean flag = false; try { //插入或者更新的行數,單條插入成功就是1 int i = mDao.create(user); flag = i == 1 ? true : false; } catch (SQLException e) { e.printStackTrace(); } return flag; } /** * 批量插入數據 * * @param user * @return 是否插入成功 */ public boolean insertAll(List user) { boolean flag = false; try { //插入或者更新的行數,單條插入成功就是1 int i = mDao.create(user); flag = i == 1 ? true : false; } catch (SQLException e) { e.printStackTrace(); } return flag; } /** * 刪除一條數據 * * @param user * @return */ public boolean delete(User user) { boolean flag = false; try { int rowCount = mDao.delete(user); flag = rowCount == 1 ? true : false; } catch (SQLException e) { e.printStackTrace(); } return flag; } /** * 批量刪除 * * @param users * @return */ public boolean deleteAll(List users) { boolean flag = false; try { int rowCount = mDao.delete(users); flag = rowCount == 1 ? true : false; } catch (SQLException e) { e.printStackTrace(); } return flag; } /** * 更新數據 * * @param user * @return */ public boolean update(User user) { boolean flag = false; try { int rowCount = mDao.update(user); flag = rowCount == 1 ? true : false; } catch (SQLException e) { e.printStackTrace(); } return flag; } /** * 批量更新 * * @param users * @return */ public boolean updateAll(List users) { boolean flag = true; try { for (User user : users) { int rowCount = mDao.update(user); boolean b = rowCount == 1 ? true : false; if (!b) { flag = false; } } } catch (SQLException e) { e.printStackTrace(); } return flag; } public void query() { QueryBuilder builder = mDao.queryBuilder(); Where where = builder.where(); try { //相當於:select * from user where name = '張三' and age > 20 where.and(where.eq("name","張三"),where.ge("age",20)); //下面這條語句相當於:select * from user where (name = '張三' and age > 20 ) or address = '陜西' where.and(where.eq("name","張三"),where.ge("age",20)).or().eq("address","陜西"); List users = where.query(); } catch (SQLException e) { e.printStackTrace(); } } }