现在可以将数据库写到SD卡中,但是数据库文件不全,只写了3072K,里面有一个android_metadata表,但我数据库中没有这个表。不知道什么原因。网上查找未找到解决方法。找了好几天,无结果,请大家帮忙看看。多谢。
13 个解决方案
#1
怎么没有人遇见过此问题吗
#2
Assets/raw单个文件有大小限制的1M大小,大了要分割才行
#3
文件没有超过1M,只有682 KB。我在写文件的时候每写一次让它sleep了5秒,发现大小再变化,不断增大。但不知道为什么到最后又变成了3072 K。
#4
贴点代码看看 有没加后缀".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();
while ((count = is.read(buffer)) !=-1) {///试试是不是这里出问题啦
fos.write(buffer, 0, count);
}
is.close();
fos.close();
#8
输出关闭时这样试试
fos.flush();
fos.close();
#9
System.out.print("是不里"+String.valueOf(is.read(buffer)));
把这句屏蔽了 要不少读了一次
把这句屏蔽了 要不少读了一次
#10
还是不行。如下图:
#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
System.out.print("是不里"+String.valueOf(is.read(buffer)));
呵呵 你多读了次 但没写入 结果文件小了
#13
我也遇到同样的问题了,请问一下楼主,你的关于数据库的以上操作代码在哪整的,给个连接呗,谢谢
#1
怎么没有人遇见过此问题吗
#2
Assets/raw单个文件有大小限制的1M大小,大了要分割才行
#3
文件没有超过1M,只有682 KB。我在写文件的时候每写一次让它sleep了5秒,发现大小再变化,不断增大。但不知道为什么到最后又变成了3072 K。
#4
贴点代码看看 有没加后缀".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();
while ((count = is.read(buffer)) !=-1) {///试试是不是这里出问题啦
fos.write(buffer, 0, count);
}
is.close();
fos.close();
#8
输出关闭时这样试试
fos.flush();
fos.close();
#9
System.out.print("是不里"+String.valueOf(is.read(buffer)));
把这句屏蔽了 要不少读了一次
把这句屏蔽了 要不少读了一次
#10
还是不行。如下图:
#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
System.out.print("是不里"+String.valueOf(is.read(buffer)));
呵呵 你多读了次 但没写入 结果文件小了
#13
我也遇到同样的问题了,请问一下楼主,你的关于数据库的以上操作代码在哪整的,给个连接呗,谢谢