上一篇(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

 

更多相关文章

  1. 20172323 2017-2018-2《程序设计与数据结构》第十一周学习总结
  2. Android多文件断点续传(二)——实现数据库储存下载信息
  3. Android数据存储方式:SharePreference、SQLite、ContentProvider
  4. android以后台service的方式获取GPRS数据
  5. Android 数据库对比
  6. 20、从头学Android之Android的数据存储--File
  7. android 自定义AlertDialog 与Activity相互传递数据
  8. android中如何判断edittext中数据为空?

随机推荐

  1. [转载]Android开发者网址导航
  2. Android之SlidingDrawer抽屉效果
  3. android完整资讯App、Kotlin新闻应用MVP
  4. Android横竖屏切换总结
  5. Welcome, Android(安卓)Q(刷机有风险,操作
  6. webkit framework for android 4.0.3 代
  7. android:gravity和andrid:layout_gravity
  8. Android高手速成--第二部分 工具库
  9. Android(安卓)build.prop生成过程
  10. 初学Android快速上手经验(自我小结)