greenDAO 外部数据库的使用

使用情况

所谓外部数据库文件此处指的就是一个在外部单独创建的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 外部数据库的使用)