上一篇(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
或者点击下面网址下载
https://download.csdn.net/download/w180600/10346449
下面我们来简单的使用下OrmLite
1.下载jar包
需要去官网下载你想要的版本,我使用的是最新的版本5.1. 下载ormlite-android-5.1.jar和ormlite-core-5.1.jar
下载地址为http://ormlite.com/releases/
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:[email protected] * @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:[email protected] * @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<String, Dao> daos = new HashMap<String, Dao>(); private static NewsHelper instance; private Dao<NewsItem, Integer> 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<NewsItem, Integer> 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:[email protected] * @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<size;i++){ mNewsItemDao.create(var1.get(i)); } return 0; } public List query(String query) throws SQLException {//查询 QueryBuilder builder = mNewsItemDao.queryBuilder(); return builder.where().eq("title", query).query(); } public long countOf() throws SQLException {//表中有多少条目 return mNewsItemDao.countOf(); } }
在你想要使用的地方调用就好了
try { mNewsItemDao.createAll(mDataList); } catch (SQLException e) { e.printStackTrace(); }
上面的需要的话可以点下面链接进行下载 https://github.com/Peter6666/Worm