首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

公布Sqlite数据库

2012-09-04 
发布Sqlite数据库前言  如何将Sqlite数据库与apk一同发布?刚开始用时有朋友告诉我直接用adb命令手工发布,

发布Sqlite数据库

前言

  如何将Sqlite数据库与apk一同发布?刚开始用时有朋友告诉我直接用adb命令手工发布,或者写sql语句动态创建,感觉不太理想。得益于银河使者的实现基于Android的英文电子词典这篇文章,再经过文章2的补充以及实践得以完成,感谢大家的分享!

?

文章

  1.  实现基于Android的英文电子词典

  2.  Using your own SQLite database in Android applications

  3.  Android Asset,res/raw限制文件大小UNCOMPRESS为1MB

?

声明

  欢迎转载,但请保留文章原始出处:)

    博客园:http://www.cnblogs.com

农民伯伯: http://www.cnblogs.com/over140/? ?

?

正文

  一、准备

    1.1  准备目录

      在Android项目工程res下新建raw文件夹,在这个文件夹里面的文件不会被编译压缩。

    1.2  准备数据库

      新建或拷贝一个数据库,然后打开,依次执行以下两条SQL语句:

CREATE?TABLE?"android_metadata"?("locale"?TEXT?DEFAULT?'zh_CN')INSERT?INTO?"android_metadata"?VALUES?('zh_CN')

      这个表用途不太清楚,但是如果用Android sqlite API创建一个数据库的话,会默认带上这个表,而且少了还不行,会报错。

?

  二、实现代码

????/**
?????*?是否完成初始化
?????*/
????private?static?boolean?isInit?=?false;

????
????/**
?????*?初始化数据库
?????*?@param?context
?????*/
????synchronized?public?static?void?init(Context?context)
????{
????????if(isInit)
????????????return;
????????//?输出路径
????????String?outFileName?=?DATABASE_PATH?+?DATABASE_NAME;

????????//检测是否已经创建
????????File?dir?=?new?File(outFileName);
????????if(dir.exists())
????????????return;

????????//?检测/创建数据库的文件夹
????????dir?=?new?File(DATABASE_PATH);

????????if?(!dir.exists())
????????????dir.mkdir();

????????InputStream?input?=?null;
????????OutputStream?output?=?null;
????????//?从资源中读取数据库流
????????input?=?context.getResources().openRawResource(R.raw.db);

????????try?{
????????????output?=?new?FileOutputStream(outFileName);

????????????//?拷贝到输出流
????????????byte[]?buffer?=?new?byte[2048];
????????????int?length;
????????????while?((length?=?input.read(buffer))?>?0)?{
????????????????output.write(buffer,?0,?length);
????????????}
????????}?catch?(FileNotFoundException?e)?{
????????????e.printStackTrace();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}?finally?{
????????????//?关闭输出流
????????????try?{
????????????????output.flush();
????????????????output.close();
????????????}?catch?(IOException?e)?{
????????????}
????????????//?关闭输入流
????????????try?{
????????????????input.close();
????????????}?catch?(IOException?e)?{
????????????}
????????}
????????isInit?=?true;
????}复制代码

    代码说明:

      a).  在主窗口(Activity)中调用一次即可,随后直接用SQLiteDatabase.openDatabase操作使用即可。

?

结束?

   注意文章3,但没有测试过,不知道后续的版本会不会改进这个数据库发布的问题。

?

热点排行