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

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

猜你喜欢

转载自blog.csdn.net/w180600/article/details/79925861