美文网首页
greenDAO 外部数据库的使用

greenDAO 外部数据库的使用

作者: 强0808 | 来源:发表于2018-05-21 16:56 被阅读0次

    使用情况

    所谓外部数据库文件此处指的就是一个在外部单独创建的db文件,假设有这么一个场景,我们项目中有一些本地数据,
    不需要接口去获取的(不需要进行网络操作),写死的数据,比如全国各个省各个市的一些基本信息,
    每个市的信息可以作为表里的一条记录存放,在项目中使用,
    此时如何我们已经有了包含这些信息的db文件,
    我们就可以通过greendao来操作这个db文件,更具方便进行开发工作
    

    1.将数据库放到Android Studio中

    在Java 文件目录下创建assets文件
    将xxx.db文件复制到该文件目录下
    

    2.将assets目录下数据库文件拷贝到 greenDAO默认保存数据库的地址也是在应用安装目录的/databases/文件夹下。

    //数据库文件路径
        private static final String DB_PATH = "/data/data/包名/databases/";
        //数据库文件名
        private static final String DB_NAME = "数据库.db";
    
       /**
         * assets目录下的db转移到databases
         *
         * @param context     上下文对象
         * @param assetsName  assets目录下db的文件名
         * @param isNeedCover 是否需要覆盖
         */
        public static void copyDBToDatabases(Context context, String assetsName, Boolean isNeedCover) {
    
            // 获取内部存储目录
            String path = context.getFilesDir().getParent();
    
            try {
    
                // 组装生成db的目录(不存在则创建目录)
                String dbFolder = path + File.separator + "databases" + File.separator;
                File file = new File(dbFolder);
                if (!file.exists()) {
                    file.mkdirs();
                }
    
    
                // 组装db路径
                String outFileName = dbFolder + assetsName;
    
                File dataFile = new File(outFileName);
    
                // 文件不存在创建 或 文件存在且覆盖也创建
                if (!dataFile.exists() || (dataFile.exists() && isNeedCover)) {
    
                    if (dataFile.exists()) {
                        dataFile.delete();
                    }
    
    
                    InputStream myInput = context.getAssets().open(assetsName);
                    OutputStream myOutput = new FileOutputStream(outFileName);
                    byte[] buffer = new byte[1024];
                    int length;
                    while ((length = myInput.read(buffer)) != -1) {
                        myOutput.write(buffer, 0, length);
                    }
                    myOutput.flush();
                    myOutput.close();
                    myInput.close();
                }
    
    
            } catch (IOException e) {
                Log.i("DbUtils", "error--->" + e.toString());
                e.printStackTrace();
            }
    
        }
    

    4.数据库表的创建

    /**
     *
     * 因为导入的是已经创建好表的数据库,
     * 所以要在类前注解:@Entity(nameInDb = "productinfo",createInDb = false),
     * 其中nameInDb = "tablename"是声明表名,不作此声明greenDAO默认操作的是库名的同名的表;
     * 另一句createInDb = false是声明不再创建这个表,
     * 如果不这样声明greenDAO就会在UserDao文件中加入createTable方法,
     * 继而创建一个名叫tablename的同名表,然后就会出现table already exists的错误。
     */
    @Entity(nameInDb = "Zdftyzdrxdxl",createInDb = false)
    public class InspecBean {
    
        @Property(nameInDb = "id")
        @Id(autoincrement = true)
        private Long id;
        @Property(nameInDb = "Sid")
        private String mac;
        @Property(nameInDb = "Dict_xlname_zdft")
        private String name;
        @Property(nameInDb = "TotleXxNum")
        private Integer num;
    
    }
    

    5.使用数据库

    DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "数据库.db");
    Database db = helper.getWritableDb();
    DaoSession daoSession = new DaoMaster(db).newSession();
    

    相关文章

      网友评论

          本文标题:greenDAO 外部数据库的使用

          本文链接:https://www.haomeiwen.com/subject/bozglftx.html