如何将打开res/raw目录中的数据库文件?

在Android中不能直接打开res /raw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,

然后再打开该数据库文件。

复制的基本方法是使用getResources().openRawResource方法获得res/raw目录中资源的 InputStream对象,

然后将该InputStream对象中的数据写入其他的目录中相应文件中。

在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件。

实现如下:copyDB();

private void copyDB() {
		//只要你拷贝了一次,我就不要你再拷贝了
		try {
			File file = new File(getFilesDir(), "address.db");
			if(file.exists()&&file.length()>0){
				//正常了,就不需要拷贝了
				Log.i("copyDB", "正常了,就不需要拷贝了");
			}else{
				//().openRawResource
				//InputStream is = getAssets().open("address.db");
				InputStream is = getResources().openRawResource(R.raw.address);
				FileOutputStream fos = new FileOutputStream(file);
				byte[] buffer = new byte[1024];
				int len = 0;
				while((len = is.read(buffer))!= -1){
					fos.write(buffer, 0, len);
				}
				is.close();
				fos.close();
			}

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

打开数据库:

	public static String path = "data/data/com.itheima.mobilesafe/files/address.db";

	public static String SearchNumber(String number){
		String adrress = number;
		SQLiteDatabase openDatabase = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
		Cursor cursor = openDatabase.rawQuery("select location from data2 where id=(select outkey  from data1 where id=?)",
				new String[]{number.substring(0,7)});
		while(cursor.moveToNext()){
        		String location = cursor.getString(0);
        		 adrress = location ;
		}
		return adrress;
	}
时间: 2024-10-28 22:47:11

如何将打开res/raw目录中的数据库文件?的相关文章

android 打开 res raw目录 中 数据库文件

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha 安卓不能直接打开 res raw 中的 数据库 文件. 通过 资源 获取资源 方法 , 然后在通过 打开资产资源方法 获得 res raw中的  输入流  对象, 然后将 输入流对象 中的数据 写入 其他目录中的相应文件中. 然后 通过 sqlite数据库的 打开或者创建数据库方法  来打开任意目录中的 sqlite

通过assets像安卓程序目录中导入数据库文件出现错误的解决办法

错误提示如下,下面的错误信息 08-13 07:36:31.396: W/System.err(9814): java.io.IOException 08-13 07:36:31.416: W/System.err(9814):  at android.content.res.AssetManager.readAsset(Native Method) 08-13 07:36:31.416: W/System.err(9814):  at android.content.res.AssetMana

Android开发系列(十七):读取assets目录下的数据库文件

在做Android应用的时候,不可避免要用到数据库.但是当我们把应用的apk部署到真机上的时候,已经创建好的数据库及其里边的数据是不能随着apk一起安装到真机上的. (PS:这篇博客解决了我前面博客中写的一个小游戏的一个问题,另外也可以读取Raw目录下的数据库文件) 这就造成了一个问题,这个问题其实很好解决,解决方法如下: 我们首先把有数据的数据库文件放在assets资源目录下边,然后在apk应用启动的时候,把assets目录下的数据库文件的数据写入到真机的内存中去. 下边开始我们的代码编写:

在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world

一.题目 编写一个内核模块,在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world.内核版本要求2.6.18 ? 二.实验环境 物理主机:win7 64bit, i5双核,8G内存 虚拟机:Vmware Workstation 10.0.2 虚拟主机: CentOs-5.11,内核2.6.18 ? 三.实验思路 在着手解决问题之前,我在网上查阅了一些资料,大多是关于模块的介绍.linux内核采用的是模块化编程,这样可以很容易的添加或

[Perl系列—] 1. 清空目录及目录中的所有文件

Perl 删除单个文件和目录 Perl 删除单个文件的语法是: unlink 举例来说, 删除 D 盘 temp 目录下的 test.txt 的写法就是: unlink "D:/temp/test.txt" 如果要删除这个目录中所有的文件的话(不包含子目录) unlink glob "D:/temp/*" Perl 删除单个目录的语法是:  rm 类似, 删除上面的temp 目录的写法就可以是: rmdir "D:/temp" 看起来很简单, 但

/proc 目录中的主要文件的说明

/proc 目录中的主要文件的说明 文件或目录名称 描 述 apm 高级电源管理信息 cmdline 文件给出了内核启动的命令行 CPUinfo 中央处理器信息 devices 可以用到的设备(块设备/字符设备) dma 显示当前使用的 DMA 通道 filesystems 核心配置的文件系统 ioports 当前使用的 I/O 端口 interrupts 文件的每一行都有一个保留的中断 kcore 系统物理内存映像 kmsg 核心输出的消息,被送到日志文件 mdstat 文件包含了由 md 设

列出一个目录中的所有文件

file/ls1.c 1 #include "apue.h" 2 #include <dirent.h> 3 int 4 main(int argc, char *argv[]) 5 { 6 DIR *dp; 7 struct dirent *dirp; 8 if (argc != 2) 9 err_quit("usage: ls directory_name"); 10 if ((dp = opendir(argv[1])) == NULL) 11 e

dos命令删除代码目录中的.svn文件

当需要删除代码目录中的.svn文件时,可以用一句dos命令轻松搞定 for /r "删除.svn的目录" %i in (.svn) do rd /s /q %i

将一个目录中所有PDF文件合并到一个新的PDF文件中

将一个目录中所有PDF文件合并到一个新的PDF文件中 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System;using System.Collections.Generic;using System.Text;using Syst