因项目要用使用到数据库来存放一些数据,使用SQLite时来做则显得比较麻烦,后来就选择封装OrmLite来做为数据库的框架.
第一步:集成jar包到项目
到官网http://ormlite.com/releases/去下载相应的core和android一共两个jar文件集成到项目.
第二步:创建相应javaBean,类
Article代码如下:
import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable;
/** * ormlite是通过注解方式配置该类的持久化参数,其中常用参数如下: 1.表名:不指定的话表名就是类名. @DatabaseTable(tableName="dataTableName") 2.字段:这个可以配置的属性有点多. @DatabaseField (1)主键: @DatabaseField(id=true) (2)列名: 不指定的话就是和变量名一样的 @DatabaseField(columnName="columnName") (3) 数据类型: 这个一般情况下都不用指定,可以根据java 类获得 @DatabaseField(dataType=DataType.INTEGER) (4) 默认值: @DatabaseField(defaultValue="0") (5)长度:一般用于String型 @DatabaseField(width=13) (6) 能否为空:默认为True @DatabaseField(canBeNull=false) */ @DatabaseTable(tableName = "article")//声明表名为"article" public class Article { @DatabaseField(id=true)//设定主键,在使用类place等方式会使用到,他会跟所主键来判定是insert还是update private int aid; @DatabaseField(columnName = "title")//不指定的就表示以此名称为表中的列名 private String title; @DatabaseField() private String content; @DatabaseField() private String date;
public Article(){//需要提供一个无参的构造方法
}
public Article(int aid, String title, String content, String date) { this.aid = aid; this.title = title; this.content = content; this.date = date; } public int getAid() { return aid; } public void setAid(int aid) { this.aid = aid; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } }
第三步:创建DatabaseHelper类,代码如下:
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; import java.sql.SQLException; /** * Created by lww on 2016/5/10 */ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { public DatabaseHelper(Context context) { this(context,"test.db",null,1); } public DatabaseHelper(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, Article.class);//此处创表 LogUtil.i("创建数据库成功"); } catch (SQLException e) { e.printStackTrace(); LogUtil.e("创建数据库失败:" + e); } } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion) {//版本升级时的处理 try { TableUtils.dropTable(connectionSource, Article.class, true); onCreate(sqLiteDatabase, connectionSource); LogUtil.i("更新数据库成功"); } catch (SQLException e) { e.printStackTrace(); LogUtil.i("更新数据库失败:"+e); } } }第四步:创建相关的DAO类ArticleDao,代码如下:
import android.content.Context; import com.j256.ormlite.android.apptools.OpenHelperManager; import com.j256.ormlite.dao.Dao; import java.sql.SQLException; import java.util.List; import java.util.Map; /** * 数据库的操作类,常用操作的demo :insert delete update query replace */ public class ArticleDao { private DatabaseHelper dataHelper; public ArticleDao(Context context){ if (dataHelper == null) { dataHelper = OpenHelperManager.getHelper(context, DatabaseHelper.class); } } public void releaseHelper(){ if (dataHelper != null) { OpenHelperManager.releaseHelper(); dataHelper = null; } } public boolean insert(Article article){//插入单个对象 int position=-1; try { position=dataHelper.getDao(Article.class).create(article); } catch (SQLException e) { e.printStackTrace(); } return position>-1; } public void insert(List<Article> articles){//插入一组对象 for (Article article : articles) { try { dataHelper.getDao(Article.class).create(article); } catch (SQLException e) { e.printStackTrace(); } } } public void deleteByID(int id){ try { Dao<Article, Integer> dao = dataHelper.getDao(Article.class); dao.deleteById(id); // dao.delete(article) 或者删除单个对象,也根据id来删的 } catch (SQLException e) { e.printStackTrace(); } } public void update(Article article){ try { dataHelper.getDao(Article.class).update(article); } catch (SQLException e) { e.printStackTrace(); } } public void replace(Article article){ try { dataHelper.getDao(Article.class).createOrUpdate(article); } catch (SQLException e) { e.printStackTrace(); } } public List<Article> queryAll(){//查询全部 try { return dataHelper.getDao(Article.class).queryForAll(); } catch (SQLException e) { e.printStackTrace(); } return null; }public List<Article> queryByMap(Map<String,Object> map){ try { return dataHelper.getDao(Article.class).queryForFieldValues(map); } catch (SQLException e) { e.printStackTrace(); } return null; } /** * 或上面的方法不能满足需求,可以获取database来执行相关的操作 * * @param sql * @param bindArgs */ public void exeSQL(String sql, Object[] bindArgs){ dataHelper.getWritableDatabase().execSQL(sql,bindArgs); } }经由以上四步就可以在Activity中使用了,测试代码如下:
** * 测试 ORMLite数据库框架 */ private void databaseTest() { ArticleDao articleDao = new ArticleDao(this); articleDao.insert(new Article(401,"title","content","data")); articleDao.insert(new Article(402,"title","content","data")); articleDao.insert(new Article(403,"title3","content3","data3")); articleDao.insert(new Article(404,"title4","content4","data4")); articleDao.deleteByID(402); articleDao.update(new Article(403,"title3update","content3update","data3update")); articleDao.replace(new Article(405,"title5replace","content5replace","data5replace")); articleDao.replace(new Article(405,"title5replace","content5replace","data5replace")); List<Article> articles = articleDao.queryAll(); for (Article article:articles){ LogUtil.i("article:"+article); } articleDao.releaseHelper();//操作完毕后关闭,不确定可放入Destory中来关闭 }
运行Log如下:
article:Article{aid=401, title='title', content='content', date='data'} article:Article{aid=403, title='title3update', content='content3update', date='data3update'} article:Article{aid=404, title='title4', content='content4', date='data4'} article:Article{aid=405, title='title5replace', content='content5replace', date='data5replace'}
可见使用还算比较方便,由于是基于反射在性能略低于SQLite。