android不能访问数据库文件,android下访问已存在的sqlite数据库文件的办法
问题来源:android下的sqlite数据库一般都是单机的,当一个应用中数据库的数据多的时候,每换一个机子都重新配置一下数据库中所有数据显然是浪费时间的,所以最好的办法就是可以访问一个已经存在的数据库。
解决方案:
方案一:在Eclipse中操作,仅仅限于模拟器使用。
步骤:
在Eclipse打开File Explorer视图, File Explorer是用来查看设备的文件的, 打开方式为在Eclipse中执行【Window】-【Show View】-【other】-【File Explorer】操作。
找到要导入文件的位置,也就是数据库默认的位置/data/data//database目录。
选中目录,然后点右上角位置的设备图标【Pull a file from the device】,然后选择要上传的数据库即可。
图示如下:
方案二:将数据库放到res/raw目录下,在第一次数据访问数据库时拷贝纸/data/data//database目录下,模拟器和真机都适用。
拷贝的代码如下:
try {
String filePath = context.getCacheDir().getAbsolutePath();
String DATABASE_PATH = filePath.substring(0, filePath.length() - 5)
+ "databases";
String DATABASE_FILENAME = "usmartscada.db";
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
if (!dir.exists()) {
dir.mkdir();
}
if (!(new File(databaseFilename)).exists()) {
InputStream is = context.getResources().openRawResource(R.raw.usmartscada);;
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
// 开始复制文件
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
上面的代码例子数据库的名字为usmartscada.db ,同时证明了复制进来的数据库可以正常进行读取和写入,不存在权限不够不能读取和写入的问题, 但是上面的代码会有几个问题。
为什么要把已存在数据库文件放在res/raw文件夹下, 放在其它地方可以吗?
如果放在res/raw文件夹下,数据库文件在apk打包的时候就必须确定并且不可更改,否则每次都要重新编译生成apk,在使用的时候会很麻烦,所以最好是将数据库文件放置在sd卡的某个位置。
经过验证得知,数据库文件可以放置到其它位置,例如sd卡的某个位置,至于放在什么位置根据具体情景来觉得,上面的代码只是一个例子而已,当然放在不同的位置,访问文件的时候的方式也不一样。当然注意要访问sd卡的时候一定要在AndroidManifest.xml文件中添加访问sd卡的权限。
上面的代码没有判断已存在的数据库文件是否存在?一是为了代码的严谨性考虑,二是因为在特殊的机子上可能不需要之前已经存在的数据库,希望自己配置并生成数据库,此时就不需要复制之前的数据库。
这个问题根据实际情景来决定是否需要判断已存在的数据库文件是否存在,判断的时候根据数据库文件放置的位置不同而不同,另外如果防止在res/raw文件夹下没有办法判断数据库文件是否存在,因为访问res/raw文件夹下的文件使用的方法是R.raw.xxx,如果文件不存在,没办法得到数据库文件的对象,所以也就没办法判断,补充一个知识res/raw文件夹下的文件的绝对路径是”android.resource://”+ getPackageName() + R.raw.xxx。
android不能访问数据库文件,android下访问已存在的sqlite数据库文件的办法相关推荐
- 自定义语义分割数据集(划分训练集与验证集)、并且将一个文件夹下的所有图片的名字存到txt文件
目录 1.划分训练集.验证集与测试集 2.文件名称保存为txt 3.文件移动 4. 将数据集保存为.pkl格式以及读取.pkl格式文件 我们可以借助Pytorch从文件夹中读取数据集,十分方便,但是P ...
- android layout文件夹下新建子文件夹 及解决文件夹爆红
开发页面时xml文件都是放在layout下面,当项目比较大 页面比较多时这样是不是就比较混乱,于是乎我们要新建子文件夹.步骤如下: 1.将项目以project目录打开,右键单击layout文件夹,选择 ...
- 怎么在linux下访问磁盘,在Redhat下访问NTFS磁盘
在Redhat下访问NTFS磁盘 发布时间:2005-09-02 00:05:38来源:红联作者:ABC 方法是对Redhat 7.3 8.0 9.0完全解决方法,最为简单的解决办法. 下载RPM 主 ...
- linux cp 时 略过文件,CentOS下执行cp命令式提示略过文件夹
今天在CentOS下复制一个文件夹到另一个文件夹的时候cp ./res /usr 的时候出现了问题,提示我的是: cp略过了文件夹 后来我找了一下 在网上search了一下CP命令的用法: CP命令 ...
- linux java读取文件夹下文件名,Java获取Linux上指定文件夹下所有第一级子文件夹...
说明:需要只获得第一级文件夹目录 package com.sunsheen.jfids.studio.monitor.utils; import java.io.BufferedReader; imp ...
- linux下执行shell脚本文件,Linux下使用shell脚本自动执行脚本文件
搜索热词 以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 #将tomcat中 ...
- linux 自动安装mysql数据库_linux系统下源码安装mysql5.6数据库
linux系统下源码安装mysql5.6数据库 下载mysql数据库相关软件包(百度云盘:http://pan.baidu.com/s/1bnL31c7) 从mysql 5.5版本开始,mysql源码 ...
- mysql windows导出sql文件_Windows下使用mysqldump命令导入/导出.sql文件
1.mysqldump.exe在MySql的安装目录的bin目录下 如图: 2.使用Windwos命令进入MySql安装目录的bin目录下. 如图: 3.使用mysqldump命令导出.sql文件 ( ...
- linux下编辑某个文件,linux下修改以某个字母开头的文件后戳
1.怎么在linux下修改以某一字母开头的文件后戳 源文件内容[root@localhost test]# ls stu10.txt.php stu3.txt.php stu6.txt.php ...
最新文章
- 大连理工大学计算机原理实验交通灯,大连理工大学计算机原理第四次实验.docx...
- 轻松清理系统垃圾[转]
- python入门第二天__练习题
- BZOJ 3195: [Jxoi2012]奇怪的道路 | 状压DP
- linux之lsusb命令和cd -命令使用总结
- linux装机量,在没有盗版的世界 Linux桌面的装机量可能占比达到40%
- ZZULIOJ 1127: 矩阵乘积
- 操作系统进程线程程序
- API(应用程序接口)是什么
- Oracle的学习一:安装与卸载、sql *plus常用命令、Oracle用户管理
- SQL语言入门(一)
- 《上海悠悠接口自动化平台》-3.流程性用例,有关联的接口如何写?
- bt tracker服务器 相关内容
- 学习PPT好帖子 分享之
- excel换行按什么键_excel中关于自动换行和强制换行那些事儿
- 如何用计算机弹出斗地主的声音,电脑为什么只有斗地主的时候有声音?
- 上传下载Linux系统指定目录的文件
- Caffe和caffe2漫谈
- DDN区块链节点升级公告
- 视频教程-系统集成项目管理工程师5天修炼-软考