上一篇(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
需要去官网下载你想要的版本,我使用的是最新的版本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
先简单的介绍下等下使用的一些注解
@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 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:[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
在你想要使用的地方调用就好了
try {
mNewsItemDao.createAll(mDataList);
} catch (SQLException e) {
e.printStackTrace();
}
上面的需要的话可以点下面链接进行下载 https://github.com/Peter6666/Worm