Android 使用greenDAO 3.2.2 操作外部数据库

项目开发中有时需要用到一些写死的数据,如公司的产品信息之类的。这就需要我们先把数据库文件保存在资源文件夹下,然后当应用创建时将数据库文件拷到应用安装目录的/databases/文件夹下,然后再对数据进行操作。 
本篇文章参考了【Android】GreenDao操作外部DB数据库文件—-寒小枫

使用greenDAO操作数据库能够省去自己去写SQLite语句的繁琐,提高效率。greenDAO默认保存数据库的地址也是在应用安装目录的/databases/文件夹下。

拷贝文件

拷贝文件就是将数据库文件拷到应用安装目录的/databases/文件夹下

//数据库文件路径
    private static final String DB_PATH = "/data/data/包名/databases/";
    //数据库文件名
    private static final String DB_NAME = "dbname.db";

    /**
     * 将assets文件夹下文件拷贝到/databases/下
     * @param context
     * @param db_name
     */
    public static void copyDbFileContext context, String db_name) {
        InputStream in = null;
        FileOutputStream out = null;
        String path = "/data/data/" + context.getPackageName) + "/databases/";
        File file = new Filepath + db_name);

        //创建文件夹
        File filePath = new Filepath);
        if !filePath.exists))
            filePath.mkdirs);

        if file.exists))
            return;

        try {
            in = context.getAssets).opendb_name); // 从assets目录下复制
            out = new FileOutputStreamfile);
            int length = -1;
            byte[] buf = new byte[1024];
            while length = in.readbuf)) != -1) {
                out.writebuf, 0, length);
            }
            out.flush);
        } catch Exception e) {
            e.printStackTrace);
        } finally {
            try {
                if in != null) in.close);
                if out != null) out.close);
            } catch IOException e1) {
                e1.printStackTrace);
            }
        }
    }

导入greenDAO依赖库

// project级builde.gradle文件中
buildscript {
    repositories {
        jcenter)
        mavenCentral) // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
    }
}

// module级builde.gradle文件中
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin

dependencies {
    compile 'org.greenrobot:greendao:3.2.2' // add library
}

配置路径

//module级builde.gradle文件中
greendao {
    schemaVersion 1
    daoPackage '包名.gen'
    targetGenDir 'src/main/java'
}

创建一个实体类

* 注意: * 
* 因为导入的是已经创建好表的数据库,所以要在类前注解:@EntitynameInDb = "productinfo",createInDb = false),其中nameInDb = "tablename"是声明表名,不作此声明greenDAO默认操作的是库名的同名的表;另一句createInDb = false是声明不再创建这个表,如果不这样声明greenDAO就会在UserDao文件中加入createTable方法,继而创建一个名叫tablename的同名表,然后就会出现table already exists的错误。

每个变量前的@PropertynameInDb = "_id")注解是为了让变量名能够指向列名,如果表中的一列是Name,而实体类中的属性是name,则在greenDAO编译后会创建

public final static Property Ear = new Property2, String.class, "name", false, "NAME");

参数分别是(列号,数据类型,变量名,是否是主键,列名),这里的列名默认是变量名的大写形式,与表中的列名有了偏差,执行SQLite语句时就会出现no such columns的错误。

@EntitynameInDb = "tablename",createInDb = false)
public class User{
    @PropertynameInDb = "_id")
    @Id autoincrement = true)
    private long id;
    @PropertynameInDb = "Name")
    private int name;
    @PropertynameInDb = "Ear")
    private String ear;
}

创建完后要Make Project一次。

操作数据表

一切准备就绪后就是操作数据表了,首先要获得数据表的操作对象

DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelperthis, "dbname.db");
Database db = helper.getWritableDb);
DaoSession daoSession = new DaoMasterdb).newSession);
ProductDao dao = daoSession.getProductDao);

之后就能进行各种操作了。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注