android 读取raw下数据库文件

时间:2022-03-25 22:52:39
我写了一个小程序,读取现有数据库,数据库内容已经添加好了,放到raw目录下,按照网上的方法程序了一半。
现在可以将数据库写到SD卡中,但是数据库文件不全,只写了3072K,里面有一个android_metadata表,但我数据库中没有这个表。不知道什么原因。网上查找未找到解决方法。找了好几天,无结果,请大家帮忙看看。多谢。

13 个解决方案

#1


怎么没有人遇见过此问题吗

#2


Assets/raw单个文件有大小限制的1M大小,大了要分割才行

#3


文件没有超过1M,只有682 KB。我在写文件的时候每写一次让它sleep了5秒,发现大小再变化,不断增大。但不知道为什么到最后又变成了3072 K。

#4


引用 3 楼 sbfnl 的回复:
文件没有超过1M,只有682 KB。我在写文件的时候每写一次让它sleep了5秒,发现大小再变化,不断增大。但不知道为什么到最后又变成了3072 K。


贴点代码看看 有没加后缀".sqlite"或".db"

#5


if (!(new File(dbfile).exists())) {  //判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
InputStream is = this.context.getResources().openRawResource(
R.raw.people); //欲导入的数据库
FileOutputStream fos = new FileOutputStream(dbfile);
byte[] buffer = new byte[BUFFER_SIZE];
int count = 0;
System.out.print("是不里"+String.valueOf(is.read(buffer)));
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
is.close();
fos.close();
}
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,
null);
return db;

#6


代码从网上复制过来的。文件都有后缀名.db

#7


System.out.print("是不里"+String.valueOf(is.read(buffer)));
        while ((count = is.read(buffer)) !=-1) {///试试是不是这里出问题啦
                fos.write(buffer, 0, count);
           }
        is.close();
         fos.close();

#8


引用 6 楼 sbfnl 的回复:
代码从网上复制过来的。文件都有后缀名.db


输出关闭时这样试试
fos.flush();     
fos.close(); 

#9


System.out.print("是不里"+String.valueOf(is.read(buffer)));
把这句屏蔽了 要不少读了一次
                

#10


还是不行。如下图:
android 读取raw下数据库文件
android 读取raw下数据库文件

#11


多谢fontlose耐心讲解。问题已解决,不知道哪的问题。正确代码如下。

if (!(new File(dbfile).exists())) {  //判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
InputStream is = this.context.getResources().openRawResource(
R.raw.people); //欲导入的数据库
FileOutputStream fos = new FileOutputStream(dbfile);
byte[] buffer = new byte[BUFFER_SIZE];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.flush();
fos.close();
is.close();

}
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,
null);
return db;

#12


引用 11 楼 sbfnl 的回复:
多谢fontlose耐心讲解。问题已解决,不知道哪的问题。正确代码如下。

Java code

if (!(new File(dbfile).exists())) {  //判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
                InputStream is = this.context.getResources().openRawResourc……


System.out.print("是不里"+String.valueOf(is.read(buffer)));
呵呵 你多读了次 但没写入 结果文件小了

#13


我也遇到同样的问题了,请问一下楼主,你的关于数据库的以上操作代码在哪整的,给个连接呗,谢谢

#1


怎么没有人遇见过此问题吗

#2


Assets/raw单个文件有大小限制的1M大小,大了要分割才行

#3


文件没有超过1M,只有682 KB。我在写文件的时候每写一次让它sleep了5秒,发现大小再变化,不断增大。但不知道为什么到最后又变成了3072 K。

#4


引用 3 楼 sbfnl 的回复:
文件没有超过1M,只有682 KB。我在写文件的时候每写一次让它sleep了5秒,发现大小再变化,不断增大。但不知道为什么到最后又变成了3072 K。


贴点代码看看 有没加后缀".sqlite"或".db"

#5


if (!(new File(dbfile).exists())) {  //判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
InputStream is = this.context.getResources().openRawResource(
R.raw.people); //欲导入的数据库
FileOutputStream fos = new FileOutputStream(dbfile);
byte[] buffer = new byte[BUFFER_SIZE];
int count = 0;
System.out.print("是不里"+String.valueOf(is.read(buffer)));
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
is.close();
fos.close();
}
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,
null);
return db;

#6


代码从网上复制过来的。文件都有后缀名.db

#7


System.out.print("是不里"+String.valueOf(is.read(buffer)));
        while ((count = is.read(buffer)) !=-1) {///试试是不是这里出问题啦
                fos.write(buffer, 0, count);
           }
        is.close();
         fos.close();

#8


引用 6 楼 sbfnl 的回复:
代码从网上复制过来的。文件都有后缀名.db


输出关闭时这样试试
fos.flush();     
fos.close(); 

#9


System.out.print("是不里"+String.valueOf(is.read(buffer)));
把这句屏蔽了 要不少读了一次
                

#10


还是不行。如下图:
android 读取raw下数据库文件
android 读取raw下数据库文件

#11


多谢fontlose耐心讲解。问题已解决,不知道哪的问题。正确代码如下。

if (!(new File(dbfile).exists())) {  //判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
InputStream is = this.context.getResources().openRawResource(
R.raw.people); //欲导入的数据库
FileOutputStream fos = new FileOutputStream(dbfile);
byte[] buffer = new byte[BUFFER_SIZE];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.flush();
fos.close();
is.close();

}
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,
null);
return db;

#12


引用 11 楼 sbfnl 的回复:
多谢fontlose耐心讲解。问题已解决,不知道哪的问题。正确代码如下。

Java code

if (!(new File(dbfile).exists())) {  //判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
                InputStream is = this.context.getResources().openRawResourc……


System.out.print("是不里"+String.valueOf(is.read(buffer)));
呵呵 你多读了次 但没写入 结果文件小了

#13


我也遇到同样的问题了,请问一下楼主,你的关于数据库的以上操作代码在哪整的,给个连接呗,谢谢