Android中使用ORMLite入门示例学习
上一篇(android使用jsoup来抓取网页数据)我们使用jsoup来爬取某网站数据,现在我们想把数据保存起来。安卓的存储数据的方式很多,文件存储、SP存储、数据库存储、contentprovider存储等等。下面我们主要介绍的是数据库存储,因为原生的效率比较底下,所以我们选用一些市面上比较流行的框架OrmLite(JDBC和Android的轻量级ORM java包),Sugar(用超级简单的方法处理Android数据库),GreenDAO(一种轻快地将对象映射到SQLite数据库的ORM解决方案),ActiveAndroid(以活动记录方式为Android SQLite提供持久化),SQLBrite(SQLiteOpenHelper 和ContentResolver的轻量级包装),Realm(一个SQLite和ORM的替换品)。ORMLite可以支持多种数据库MySQL,HSQLDB,Postgres,H2,Microsoft SQL Server, Derby等等。而且跨多种平台,可移植性强。
下面我们来简单的使用下OrmLite
1.下载jar包
需要去官网下载你想要的版本,我使用的是最新的版本5.1. 下载ormlite-android-5.1.jar和ormlite-core-5.1.jar
下载地址为http://ormlite.com/releases/
或者点击下面网址下载 https://download.csdn.net/download/w180600/10346449
全部的代码下载地址 https://github.com/Peter6666/Worm
2.开始撸代码
先简单的介绍下等下使用的一些注解
@DatabaseTable(tableName = "tb_news_item") DatabaseTable注解使用TableName来指定类对应的表的名字。如果没有指定默认情况下使用类名作为对应的表名
@DatabaseField(generatedId = true) generatedId 自增长的主键 默认值是false
@DatabaseField(columnName = "title",useGetSet = true, canBeNull = false, unique = true)//columnName表示当前属性在表中代表哪个字段,useGetSet表示是否使用Getter/Setter方法来访问这个字段,canBeNull表示字段是否可以为空,默认值是true,unique表示字段是否唯一
代码如下,先定义一个bean类NewsItem
/** * @author logic. Email:2778500267@qq.com * @data 2018/4/11 */@DatabaseTable(tableName = "tb_news_item")public class NewsItem { @DatabaseField(generatedId = true) private int id; @DatabaseField(columnName = "title",useGetSet = true, canBeNull = false, unique = true)//表示当前属性在表中代表哪个字段,是否使用Getter/Setter方法来访问这个字段,字段是否可以为空,默认值是true,字段是否唯一 private String title; @DatabaseField(columnName = "desc") private String desc; @DatabaseField(columnName = "ly") private String ly; @DatabaseField(columnName = "img_url") private String img_url; @DatabaseField(columnName = "url") private String url; @DatabaseField(columnName = "type") private String type; @DatabaseField(columnName = "time") private String time; public NewsItem() { } public NewsItem( String title, String desc, String ly, String img_url, String url,String type) { this.title = title; this.desc = desc; this.ly = ly; this.img_url = img_url; this.img_url = img_url; this.url = url; this.type = type; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getLy() { return ly; } public void setLy(String ly) { this.ly = ly; } public String getImgUrl() { return img_url; } public void setImgUrl(String img) { this.img_url = img; } public String getType() { return type; } public void setType(String type) { this.type = type; }}
继承OrmLiteSqliteOpenHelper
/** * @author logic. Email:2778500267@qq.com * @data 2018/4/12 */public class NewsHelper extends OrmLiteSqliteOpenHelper { public static final Class NEWS_ITEM = NewsItem.class; private static final String TABLE_NAME = "news.db"; private static final int DATABASE_VERSION = 1; private Map daos = new HashMap(); private static NewsHelper instance; private Dao dao=null; //单例 public static synchronized NewsHelper getHelper(Context ctx) { if (instance == null) { synchronized (NewsHelper.class) { if (instance == null) instance = new NewsHelper(ctx, TABLE_NAME, null, DATABASE_VERSION); } } return instance; } public NewsHelper(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, NewsItem.class);//创建表 } catch (SQLException e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) { try { TableUtils.dropTable(connectionSource, NewsItem.class, true); onCreate(sqLiteDatabase, connectionSource); } catch (SQLException e) { e.printStackTrace(); } } public Dao getNewsDao(Class clazz) throws SQLException { Dao dao = null; String className = clazz.getSimpleName(); if (daos.containsKey(className)) { dao = daos.get(className); } if (dao == null) { dao = getDao(clazz); daos.put(className, dao); } return dao; } @Override public void close() { super.close(); for (String key : daos.keySet()) { Dao dao = daos.get(key); dao = null; } }}
统一管理增删改查
/** * @author logic. Email:2778500267@qq.com * @data 2018/4/12 */public class NewsItemDao { private Dao mNewsItemDao = null; public NewsItemDao(Context ctx) throws SQLException { if (mNewsItemDao == null) mNewsItemDao = NewsHelper.getHelper(ctx).getDao(NewsHelper.NEWS_ITEM); } public int create(Object var1) throws SQLException {//增加一条 return mNewsItemDao.create(var1); } public int createAll(List var1) throws SQLException { int size = var1.size(); if (size<=0) return -1; for (int i=0;i
在你想要使用的地方调用就好了
try { mNewsItemDao.createAll(mDataList); } catch (SQLException e) { e.printStackTrace(); }
上面的需要的话可以点下面链接进行下载 https://github.com/Peter6666/Worm
更多相关文章
- 20172323 2017-2018-2《程序设计与数据结构》第十一周学习总结
- Android多文件断点续传(二)——实现数据库储存下载信息
- Android数据存储方式:SharePreference、SQLite、ContentProvider
- android以后台service的方式获取GPRS数据
- Android 数据库对比
- 20、从头学Android之Android的数据存储--File
- android 自定义AlertDialog 与Activity相互传递数据
- android中如何判断edittext中数据为空?