项目开发中有时需要用到一些写死的数据,如公司的产品信息之类的。这就需要我们先把数据库文件保存在资源文件夹下,然后当应用创建时将数据库文件拷到应用安装目录的/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 copyDbFile(Context context, String db_name) {
InputStream in = null;
FileOutputStream out = null;
String path = "/data/data/" + context.getPackageName() + "/databases/";
File file = new File(path + db_name); //创建文件夹
File filePath = new File(path);
if (!filePath.exists())
filePath.mkdirs(); if (file.exists())
return; try {
in = context.getAssets().open(db_name); // 从assets目录下复制
out = new FileOutputStream(file);
int length = -;
byte[] buf = new byte[];
while ((length = in.read(buf)) != -) {
out.write(buf, , 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
daoPackage '包名.gen'
targetGenDir 'src/main/java'
}

创建一个实体类

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

    • 每个变量前的@Property(nameInDb = "_id")注解是为了让变量名能够指向列名,如果表中的一列是Name,而实体类中的属性是name,则在greenDAO编译后会创建
public final static Property Ear = new Property(, String.class, "name", false, "NAME");

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

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

创建完后要Make Project一次。

操作数据表

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

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

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

Android 使用greenDAO 3.2.2 操作外部数据库的更多相关文章

  1. Android GreenDao操作外部DB数据库文件

    1.背景 所谓外部数据库文件此处指的就是一个在外部单独创建的db文件,假设有这么一个场景,我们项目中有一些本地数据,不需要接口去获取的(不需要进行网络操作),写死的数据,比如全国各个省各个市的一些基本 ...

  2. [Android] Android 使用 Greendao 操作 db sqlite(2)-- 封装DaoUtils类

    继续接上文: Android 使用 Greendao 操作 db sqlite(1)-- 直接在MainActivity中调用 布局文件同上文一致,这里就不贴了. 一.封装DaoUtils类 User ...

  3. [Android] Android 使用 Greendao 操作 db sqlite(1)-- 直接在MainActivity中调用

    继续接上文: Android 使用 Greendao 操作 db sqlite 布局文件: activity_test_green.xml <?xml version="1.0&quo ...

  4. [Android] Android 使用 Greendao 操作 db sqlite

    Android 使用 Greendao 操作 db sqlite GreenDAO是一个开源的安卓ORM框架,能够使SQLite数据库的开发再次变得有趣.它减轻开发人员处理低级数据库需求,同时节省开发 ...

  5. Android数据存储之内部存储、外部存储

    首先来介绍下什么是内部存储? 在Android平台下,有着自己独立的数据存储规则,在windows平台下,应用程序能够自由的或者在特定的訪问权限基础上訪问或改动其它应用程序下的文件资源. 可是在And ...

  6. Android之greenDao使用

    文章大纲 一.greenDao简介二.greenDao实战三.项目源码下载四.参考文章   一.greenDao简介 1. 什么是greenDao   GreenDAO是一个开源的Android OR ...

  7. 「Android」GreenDao

    译文 版本:greenDAO 3.2.2 官网:http://greenrobot.org/greendao/ GitHub:https://github.com/greenrobot/greenDA ...

  8. Android开发之使用sqlite3工具操作数据库的两种方式

    使用 sqlite3 工具操作数据库的两种方式 请尊重他人的劳动成果,转载请注明出处:Android开发之使用sqlite3工具操作数据库的两种方式 http://blog.csdn.net/feng ...

  9. Android应用程序开发之图片操作(二)——工程图片资源的加载及OOM的处理

    (一)工程图片资源的加载方法 在Android应用程序开发之图片操作(一)中,详细说明了如何操作各种资源图片,只是有的没有附上示例代码,在此,我将针对项目工程中的图片资源的显示加载进行说明.官方说明, ...

随机推荐

  1. pig 入门教程(1)

    出处:http://www.codelast.com/ 本文可以让刚接触pig的人对一些基础概念有个初步的了解. 本文大概是互联网上第一篇公开发表的且涵盖大量实际例子的Apache Pig中文教程(由 ...

  2. 18. CTF综合靶机渗透(十一)

    靶机描述: SkyDog Con CTF 2016 - Catch Me If You Can 难度:初学者/中级 说明:CTF是虚拟机,在虚拟箱中工作效果最好.下载OVA文件打开虚拟框,然后选择文件 ...

  3. hello markdown

    目录 标题 标题1 标题2 标题3 有序列表 无序列表 插入图片 插入链接 粗体.斜体.删除线 引用 表格 代码 目录 新的开始 希望能够坚持下去 cnblogs也支持markdown 之前看了写ma ...

  4. C++基础之类和对象二

    (1)指向类的成员的指针分为指向数据成员的指针和指向成员函数的指针两种.一个类的对象用运算符“.*”来操作指向该类成员的指针,而一个指向类的对象的指针用运算符“->”来操作指向该类成员的指针.( ...

  5. kolla base目录下Dockerfile.j2分析

    这几天在研究kolla制作镜像的流程,记录下对kolla项目中base目录Dockerfile.j2阅读过程.本质上base目录下的Dockerfile.j2文件,对是yum 源的一些配置,从而使制作 ...

  6. 清橙 A1210. 光棱坦克

    A1210. 光棱坦克 时间限制:1.0s   内存限制:512.0MB   总提交次数:   AC次数:   平均分:   将本题分享到:        查看未格式化的试题   提交   试题讨论 ...

  7. 2、kubeadm快速部署kubernetes(v1.15.0)集群190623

    一.网络规划 节点网络:192.168.100.0/24 Service网络:10.96.0.0/12 Pod网络(默认):10.244.0.0/16 二.组件分布及节点规划 master(192.1 ...

  8. JS如何在本地读取json等文件

    JS使用ajax等在本地读取文件的时候,会报如下的错误: 解决方法一: npm install http-server -g  全局安装 http-server 下载完成之后再在目标文件中cmd中输入 ...

  9. Unity 行为树-共享变量

    一.引言 有以下小场景: 节点A:发现了 敌人. 节点B:追逐敌人. 对于同一个敌人物体,节点AB之间是如何传递数据 的呢? 行为树节点AB之间,需要一个中间变量Temp来传递数据. A发现了敌人,将 ...

  10. django 请求生命周期

    详细例子: