【Android后台】【转载】android持久化数据库包ormlite的使用
在网上关于ormlite的使用好的文章链接相当多。
自己的学习感悟:
Android ormlite的使用过程中主要有三个方米啊:
(1)、建立pojo,定义数据库的model
(2)、新建一个OpenHelper继承OrmLiteSqliteOpenHelper这个类。
在这个过程中需要做两个事,
一是将OrmLiteSqliteOpenHelp中的两个方法
onCreate(SQLiteDatabase db,ConnectionSource connectionSource)
onUpgrade(SQLiteDatabase db,ConnectionSource connectionSource, int oldVersion, int newVersion)
实现。
二是初始化DAO。(DAO有的单独列出一个文件来写,但是个人认为应该就写在OpenHelper)
格式为:Dao<T,V>包含两个泛型,第一个泛型表DAO操作的类,第二个表示操作类的主键类型
(3)、将使用的Activity继承 OrmLiteBaseActivity,针对维护的数据,进行增删查改。
只需要使用DAO调用相应的CURD方法就好了,名称命名很好,灰常简单,不做过多讲解,看一次代码就知道了
附代码:
一、User.java
/** * @author zhoushengtao * @since 2013-7-16 下午7:39:05 */ package com.stchou.helloormlite; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; /** * 数据库对应的pojo类,注意一下三点 * 1、填写表的名称 @DatabaseTable * 2、填写表中持久化项的 @DatabaseField 还可使顺便设置其属性 * 3、保留一个无参的构造函数 */ //表名称 @DatabaseTable(tableName = "user") public class User { // 主键 id 自增长 @DatabaseField(generatedId = true) private int id; // 映射 @DatabaseField(canBeNull = false) private String username; // 不为空 @DatabaseField(canBeNull = false) private String password; @DatabaseField(defaultValue = "") private String nickname ; public User() { // ORMLite 需要一个无参构造 } /** * @return the id */ public int getId() { return this.id; } /** * @param id the id to set */ public void setId(int id) { this.id = id; } /** * @return the username */ public String getUsername() { return this.username; } /** * @param username the username to set */ public void setUsername(String username) { this.username = username; } /** * @return the password */ public String getPassword() { return this.password; } /** * @param password the password to set */ public void setPassword(String password) { this.password = password; } @Override public String toString() { String text = ""; text += "\nid = " + id; text += "\nusername = " + username; text += "\npassword = " + password; return text; } }
二、包含DAO的DatabaseHelper.java
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.RuntimeExceptionDao; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.util.Log; import java.sql.SQLException; public class DatabaseHelper extends OrmLiteSqliteOpenHelper { private static final String TAG = "DatabaseHelper"; // 数据库名称 private static final String DATABASE_NAME = "HelloOrmlite.db"; // 数据库version private static final int DATABASE_VERSION = 1; private Dao<User, Integer> userDao = null; private RuntimeExceptionDao<User, Integer> userRuntimeDao = null; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // 可以用配置文件来生成 数据表,有点繁琐,不喜欢用 // super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config); } /** * @param context * @param databaseName * @param factory * @param databaseVersion */ public DatabaseHelper(Context context, String databaseName, CursorFactory factory, int databaseVersion) { super(context, databaseName, factory, databaseVersion); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { try { //建立User表 TableUtils.createTable(connectionSource, User.class); //初始化DAO userDao = getUserDao(); userRuntimeDao = getUserDataDao(); } catch (SQLException e) { Log.e(TAG, e.toString()); e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion) { try { TableUtils.dropTable(connectionSource, User.class, true); } catch (SQLException e) { Log.e(TAG, e.toString()); e.printStackTrace(); } } /** * @return * @throws SQLException */ private Dao<User, Integer> getUserDao() throws SQLException { if (userDao == null) userDao = getDao(User.class); return userDao; } public RuntimeExceptionDao<User, Integer> getUserDataDao() { if (userRuntimeDao == null) { userRuntimeDao = getRuntimeExceptionDao(User.class); } return userRuntimeDao; } /** * 释放 DAO */ @Override public void close() { super.close(); userRuntimeDao = null; } }
三、将使用的Activity继承 OrmLiteBaseActivity,针对维护的数据,进行增删查改。
只需要使用DAO调用相应的CURD方法就好了,名称命名很好,灰常简单,不做过多讲解,看一次代码就知道了
import com.j256.ormlite.android.apptools.OrmLiteBaseActivity; import com.j256.ormlite.dao.RuntimeExceptionDao; import com.j256.ormlite.stmt.DeleteBuilder; import android.os.Bundle; import android.widget.TextView; import java.sql.SQLException; import java.util.List; public class MainActivity extends OrmLiteBaseActivity<DatabaseHelper> { private TextView mTextView; private RuntimeExceptionDao<User, Integer> mUserDAO; User user; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mUserDAO = getHelper().getUserDataDao(); mTextView = (TextView)findViewById(R.id.message); deleteAll(); mTextView.append("\n#######Begin to Insert#########\n"); insertTest(); display(); mTextView.append("\n#######Begin to Update#########\n"); user.setUsername("update"); update(user); display(); mTextView.append("\n#######Begin to Delete#########\n"); delete("name2"); display(); mTextView.append("\n#######Begin to Search#########\n"); mTextView.append(search("name1").toString()); } /** * 插入值测试 */ private void insertTest() { for (int i = 0; i < 5; i++) { user = new User(); user.setUsername("name" + i); user.setPassword("test_pass " + i); mUserDAO.createIfNotExists(user); } } /** * 更新 * * @param user 待更新的user */ private void update(User user) { mUserDAO.createOrUpdate(user); // mUserDAO.update(user); } /** * 按照指定的id 与 username 删除一项 * * @param id * @param username * @return 删除成功返回true ,失败返回false */ private int delete(String username) { try { // 删除指定的信息,类似delete User where 'id' = id ; DeleteBuilder<User, Integer> deleteBuilder = mUserDAO.deleteBuilder(); deleteBuilder.where().eq("username", username); return deleteBuilder.delete(); } catch (SQLException e) { e.printStackTrace(); } return 0; } /** * 按照id查询user * * @param id * @return */ private User search(String username) { try { // 查询的query 返回值是一个列表 // 类似 select * from User where 'username' = username; List<User> users = mUserDAO.queryBuilder().where().eq("username", username).query(); if (users.size() > 0) return users.get(0); } catch (SQLException e) { e.printStackTrace(); } return null; } /** * 删除全部 */ private void deleteAll() { mUserDAO.delete(queryAll()); } /** * 查询所有的 */ private List<User> queryAll() { List<User> users = mUserDAO.queryForAll(); return users; } /** * 显示所有的 */ private void display() { List<User> users = queryAll(); for (User user : users) { mTextView.append(user.toString()); } } }
运行效果截图:
ps:使用时出现疑问的其它的参考资料。
http://blog.csdn.net/jwzhangjie/article/details/23753705
http://www.csdn 123.com/html/blogs/20130717/38808.htm(将csdn 123 中间的空格去掉= =)