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 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 操作外部数据库的更多相关文章
- Android GreenDao操作外部DB数据库文件
1.背景 所谓外部数据库文件此处指的就是一个在外部单独创建的db文件,假设有这么一个场景,我们项目中有一些本地数据,不需要接口去获取的(不需要进行网络操作),写死的数据,比如全国各个省各个市的一些基本 ...
- [Android] Android 使用 Greendao 操作 db sqlite(2)-- 封装DaoUtils类
继续接上文: Android 使用 Greendao 操作 db sqlite(1)-- 直接在MainActivity中调用 布局文件同上文一致,这里就不贴了. 一.封装DaoUtils类 User ...
- [Android] Android 使用 Greendao 操作 db sqlite(1)-- 直接在MainActivity中调用
继续接上文: Android 使用 Greendao 操作 db sqlite 布局文件: activity_test_green.xml <?xml version="1.0&quo ...
- [Android] Android 使用 Greendao 操作 db sqlite
Android 使用 Greendao 操作 db sqlite GreenDAO是一个开源的安卓ORM框架,能够使SQLite数据库的开发再次变得有趣.它减轻开发人员处理低级数据库需求,同时节省开发 ...
- Android数据存储之内部存储、外部存储
首先来介绍下什么是内部存储? 在Android平台下,有着自己独立的数据存储规则,在windows平台下,应用程序能够自由的或者在特定的訪问权限基础上訪问或改动其它应用程序下的文件资源. 可是在And ...
- Android之greenDao使用
文章大纲 一.greenDao简介二.greenDao实战三.项目源码下载四.参考文章 一.greenDao简介 1. 什么是greenDao GreenDAO是一个开源的Android OR ...
- 「Android」GreenDao
译文 版本:greenDAO 3.2.2 官网:http://greenrobot.org/greendao/ GitHub:https://github.com/greenrobot/greenDA ...
- Android开发之使用sqlite3工具操作数据库的两种方式
使用 sqlite3 工具操作数据库的两种方式 请尊重他人的劳动成果,转载请注明出处:Android开发之使用sqlite3工具操作数据库的两种方式 http://blog.csdn.net/feng ...
- Android应用程序开发之图片操作(二)——工程图片资源的加载及OOM的处理
(一)工程图片资源的加载方法 在Android应用程序开发之图片操作(一)中,详细说明了如何操作各种资源图片,只是有的没有附上示例代码,在此,我将针对项目工程中的图片资源的显示加载进行说明.官方说明, ...
随机推荐
- 树莓派 Learning 002 装机后的必要操作 --- 05 给树莓派搭建“x86 + pi”环境 -- 安装**32位运行库** -- 解决`E:未发现软件包 xxx` 问题
树莓派 装机后的必要操作 - 给树莓派搭建"x86 + pi"环境 – 安装32位运行库 – 解决E:未发现软件包 xxx 问题 我的树莓派型号:Raspberry Pi 2 Mo ...
- Could not get lock /var/lib/dpkg/lock - open 解决方法
无法获得锁 /var/lib/dpkg/lock E: Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily un ...
- Git 客户端在 WebIDE 中的实现
Coding WebIDE 是 Coding.net 自主研发的在线集成开发环境 (IDE).你可以通过 WebIDE 创建项目的工作空间, 进行在线开发, 调试等操作,有功能健全的 Terminal ...
- ps&CPU
#include <pthread.h> void f();int main() { f(); return 0;} void f() { int ...
- 谈谈asp.net中的<% %>,<%= %>,<%# %><%$ %>的使用-转
首先我们来看一下<% %>的使用 在aspx的页面中只能使用服务器控件和一般的控件,有些时候你想在该页面写入c#代码,必须使用<% %>,然后在里面写入c#的代码,下面我们来看 ...
- Ajax.BeginForm 使用过程中遇到的问题
一.Ajax.BeginForm设置的路由在浏览器中解析不到. 问题截图:在视图中设置"Counter/Index",在浏览器中显示的是"action='/'" ...
- MongoDB的安装避坑(踩坑)
下载 可以去官网下载:https://www.mongodb.com/download-center/community 安装 下载完了就可以使用安装包安装:我下载的mongodb版本是:v4.0.9 ...
- ubuntu 安装 mysql 5.7 简记
安装: apt-get install mysql-server 会安装最新版本的 mysql ,安装时会提示输入 root 的密码 进入 mysql: mysql -u root -p 进入后会出现 ...
- UVA - 12563 Jin Ge Jin Qu hao (01背包)
InputThe first line contains the number of test cases T (T ≤ 100). Each test case begins with two po ...
- 洛谷 P3128 [USACO15DEC]最大流Max Flow
题目描述 \(FJ\)给他的牛棚的\(N(2≤N≤50,000)\)个隔间之间安装了\(N-1\)根管道,隔间编号从\(1\)到\(N\).所有隔间都被管道连通了. \(FJ\)有\(K(1≤K≤10 ...