android开发 apk文件,android开发中,将数据库文件与APK一起发布?

本文介绍了如何在Android应用中将预打包的SQLite数据库文件(.db)放入res/raw目录,以避免文件被压缩。在运行时,如果/sdcard/dictionary目录不存在,程序会创建该目录并将.db文件复制到该目录。通过`openDatabase`方法打开数据库,如果文件不存在,会从res/raw复制到外部存储。这种方法允许直接访问数据库文件,无需解压。
摘要由CSDN通过智能技术生成

2015-11-11 回答

可以将xx.db文件复制到eclipse android工程中的res\raw目录中。所有在res\raw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。

使用opendatabase方法来打开数据库文件,如果该文件不存在,系统会自动创建/sdcard/dictionary目录,并将res\raw目录中的 xx.db文件复制到/sdcard/dictionary目录中。opendatabase方法的实现代码如下:这里以dictionary.db为例

[java] view plaincopyprint?

01.private sqlitedatabase opendatabase()

02. {

03. try

04. {

05. // 获得dictionary.db文件的绝对路径

06. string databasefilename = database_path + "/" + database_filename;

07. file dir = new file(database_path);

08. // 如果/sdcard/dictionary目录中存在,创建这个目录

09. if (!dir.exists())

10. dir.mkdir();

11. // 如果在/sdcard/dictionary目录中不存在

12. // dictionary.db文件,则从res\raw目录中复制这个文件到

13. // sd卡的目录(/sdcard/dictionary)

1... 可以将xx.db文件复制到eclipse android工程中的res\raw目录中。所有在res\raw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。

使用opendatabase方法来打开数据库文件,如果该文件不存在,系统会自动创建/sdcard/dictionary目录,并将res\raw目录中的 xx.db文件复制到/sdcard/dictionary目录中。opendatabase方法的实现代码如下:这里以dictionary.db为例

[java] view plaincopyprint?

01.private sqlitedatabase opendatabase()

02. {

03. try

04. {

05. // 获得dictionary.db文件的绝对路径

06. string databasefilename = database_path + "/" + database_filename;

07. file dir = new file(database_path);

08. // 如果/sdcard/dictionary目录中存在,创建这个目录

09. if (!dir.exists())

10. dir.mkdir();

11. // 如果在/sdcard/dictionary目录中不存在

12. // dictionary.db文件,则从res\raw目录中复制这个文件到

13. // sd卡的目录(/sdcard/dictionary)

14. if (!(new file(databasefilename)).exists())

15. {

16. // 获得封装dictionary.db文件的inputstream对象

17. inputstream is = getresources().openrawresource(r.raw.dictionary);

18. fileoutputstream fos = new fileoutputstream(databasefilename);

19. byte[] buffer = new byte[8192];

20. int count = 0;

21. // 开始复制dictionary.db文件

22. while ((count = is.read(buffer)) > 0)

23. {

24. fos.write(buffer, 0, count);

25. }

26.

27. fos.close();

28. is.close();

29. }

30. // 打开/sdcard/dictionary目录中的dictionary.db文件

31. sqlitedatabase database = sqlitedatabase.openorcreatedatabase(

32. databasefilename, null);

33. return database;

34. }

35. catch (exception e)

36. {

37. }

38. return null;

39. }

private sqlitedatabase opendatabase()

{

try

{

// 获得dictionary.db文件的绝对路径

string databasefilename = database_path + "/" + database_filename;

file dir = new file(database_path);

// 如果/sdcard/dictionary目录中存在,创建这个目录

if (!dir.exists())

dir.mkdir();

// 如果在/sdcard/dictionary目录中不存在

// dictionary.db文件,则从res\raw目录中复制这个文件到

// sd卡的目录(/sdcard/dictionary)

if (!(new file(databasefilename)).exists())

{

// 获得封装dictionary.db文件的inputstream对象

inputstream is = getresources().openrawresource(r.raw.dictionary);

fileoutputstream fos = new fileoutputstream(databasefilename);

byte[] buffer = new byte[8192];

int count = 0;

// 开始复制dictionary.db文件

while ((count = is.read(buffer)) > 0)

{

fos.write(buffer, 0, count);

}

fos.close();

is.close();

}

// 打开/sdcard/dictionary目录中的dictionary.db文件

sqlitedatabase database = sqlitedatabase.openorcreatedatabase(

databasefilename, null);

return database;

}

catch (exception e)

{

}

return null;

}

在opendatabase方法中使用了几个常量,这些常量是在程序的主类(main)中定义的,代码如下:

[java] view plaincopyprint?

01.public class main extends activity implements onclicklistener, textwatcher

02.{

03. private final string database_path = android.os.environment

04. .getexternalstoragedirectory().getabsolutepath()

05. + "/dictionary";

06. private final string database_filename = "dictionary.db";

07.}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值