GreenDao+存储数据库

来源:互联网 发布:验证码java 编辑:程序博客网 时间:2024/06/06 09:42

刚开始接触GreenDao数据库是都感觉挺麻烦,其实不然,用多了就会感觉到他的好处,其实挺简单的

//用GreenDao控件要到的依赖

project.gradle中


classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'

app.gradle

apply plugin: 'org.greenrobot.greendao'

compile 'org.greenrobot:greendao:3.2.0'

//依赖导完后创建一个Bean类 类中的参数有几个什么类型 取决于你要在数据库中存储的字段和类型决定

比如我的:  存储三个String类型的字段  id相当于数据库中的自增id(注意:id不可重复,必须是Long类型)   

@Entitypublic class UserBean {    @Id(autoincrement =true)    Long id;    private String publishedAt;    private String des;    private String type;    @Generated(hash = 1903720241)    public UserBean(Long id, String publishedAt, String des, String type) {        this.id = id;        this.publishedAt = publishedAt;        this.des = des;        this.type = type;    }    @Generated(hash = 1203313951)    public UserBean() {    }    public Long getId() {        return this.id;    }    public void setId(Long id) {        this.id = id;    }    public String getPublishedAt() {        return this.publishedAt;    }    public void setPublishedAt(String publishedAt) {        this.publishedAt = publishedAt;    }    public String getDes() {        return this.des;    }    public void setDes(String des) {        this.des = des;    }    public String getType() {        return this.type;    }    public void setType(String type) {        this.type = type;    }}
运行 后会生成三个文件


//此时在app.gradle中添加如下代码(gen文件会生成到指定路径下)


//创建一个对数据库操作的类

import android.app.Application;import android.content.Context;import android.content.ContextWrapper;import android.database.DatabaseErrorHandler;import android.database.sqlite.SQLiteDatabase;import android.util.Log;import com.bwie.xiaomuweek01.gen.DaoMaster;import com.bwie.xiaomuweek01.gen.DaoSession;import com.facebook.drawee.backends.pipeline.Fresco;import java.io.File;import java.io.IOException;/** * Created by Administrator on 2017/12/2. */public class GreenDaoHelper extends Application {    private GreenDaoHelper Instance;    private static DaoMaster daoMaster;    private static DaoSession daoSession;    public GreenDaoHelper getInstance() {        if (Instance == null) {            Instance = this;        }        return Instance;    }    @Override    public void onCreate() {        super.onCreate();        Fresco.initialize(this);    }    /**     * 获取DaoMaster     *     * @param context     * @return     */    public static DaoMaster getDaoMaster(Context context) {        if (daoMaster == null) {            try{                ContextWrapper wrapper = new ContextWrapper(context) {                    /**                     * 获得数据库路径,如果不存在,则创建对象对象                     *                     * @param name                     */                    @Override                    public File getDatabasePath(String name) {                        // 判断是否存在sd卡                        boolean sdExist = android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState());                        if (!sdExist) {// 如果不存在,                            Log.e("SD卡管理:", "SD卡不存在,请加载SD卡");                            return null;                        } else {// 如果存在                            // 获取sd卡路径                            String dbDir = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();                            dbDir += "/Android";// 数据库所在目录                            String dbPath = dbDir + "/" + name;// 数据库路径                            // 判断目录是否存在,不存在则创建该目录                            File dirFile = new File(dbDir);                            if (!dirFile.exists())                                dirFile.mkdirs();                            // 数据库文件是否创建成功                            boolean isFileCreateSuccess = false;                            // 判断文件是否存在,不存在则创建该文件                            File dbFile = new File(dbPath);                            if (!dbFile.exists()) {                                try {                                    isFileCreateSuccess = dbFile.createNewFile();// 创建文件                                } catch (IOException e) {                                    e.printStackTrace();                                }                            } else                                isFileCreateSuccess = true;                            // 返回数据库文件对象                            if (isFileCreateSuccess)                                return dbFile;                            else                                return super.getDatabasePath(name);                        }                    }                    /**                     * 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。                     *                     * @param name                     * @param mode                     * @param factory                     */                    @Override                    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {                        return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);                    }                    /**                     * Android 4.0会调用此方法获取数据库。                     *                     * @see android.content.ContextWrapper#openOrCreateDatabase(java.lang.String,                     *      int,                     *      android.database.sqlite.SQLiteDatabase.CursorFactory,                     *      android.database.DatabaseErrorHandler)                     * @param name                     * @param mode                     * @param factory                     * @param errorHandler                     */                    @Override                    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {                        return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);                    }                };                DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(wrapper,"test.db",null);                daoMaster = new DaoMaster(helper.getWritableDatabase()); //获取未加密的数据库            }catch (Exception e){                e.printStackTrace();            }        }        return daoMaster;    }    /**     * 获取DaoSession对象     *     * @param context     * @return     */    public static DaoSession getDaoSession(Context context) {        if (daoSession == null) {            if (daoMaster == null) {                getDaoMaster(context);            }            daoSession = daoMaster.newSession();        }        return daoSession;    }}

//存储时创建上面类的对象调用方法:具体如下

private DaoSession   session= GreenDaoHelper.getDaoSession(getActivity());
//调用添加方法----以一个对象将数据添加到数据库(  System.currentTimeMillis() --> 代表不可出现重复 )
UserBean userBean=new UserBean(System.currentTimeMillis(),r.getPublishedAt(),r.getDesc(),r.getType());session.insert(userBean);




原创粉丝点击