apk和数据库一起发布

2011-08-07 03:19

【转】apk和数据库一起发布

经过自己两天的摸索终于解决apk和数据库一起发布问题.以至于能程序启动就能数据库的数据 数据库建立就不用说了由于不能直接打开res\raw目录中的数据库文件,不过我们可以通过将这个文件复制到手机内存或SD卡上来访问。复制的方法也很简单,就是在程序第一次启动时判断要复制的目标路径是否存在该数据库文件,如果不存在该数据库文件,那先复制这个文件,然后再打开数据库文件。复制数据库文件可以通过getResources().openRawResource方法获得res\raw目录中资源的InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。打开数据库可以使用SQLiteDatabase.openOrCreateDatabase方法来打开SQLite数据库文件。openOrCreateDatabase方法可以打开任意目录下的数据库文件。
private SQLiteDatabase openDatabase()
    {
     final String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath()+ "/download";//2.2只能为这个路径 只有这个路径才能运行操作
     final String DATABASE_FILENAME = "sms.db";
        try
        {
            // 获得dictionary.db文件的绝对路径
            String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
            File dir = new File(DATABASE_PATH);
            // 如果/sdcard/dictionary目录中存在,创建这个目录
            if (!dir.exists())
            {
                if(!dir.mkdir())
                 throw new Exception("目录不存在,创建失败!");
            }
            else
            {
             Toast.makeText(this, "目录", 30000).show();
            }
            // 如果在/sdcard/dictionary目录中不存在dictionary.db文件,则从res\raw目录中复制这个文件到
            // SD卡的目录(/sdcard/dictionary)
            if (!(new File(databaseFilename)).exists())
            {
                // 获得封装dictionary.db文件的InputStream对象
                InputStream is = getResources().openRawResource(R.raw.sms);
                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);
                }
             Toast.makeText(this, "B", 10000).show();
                fos.close();
                is.close();
            }
            // 打开/sdcard/dictionary目录中的dictionary.db文件
            SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
            return database;
        }
        catch (Exception e)
        {
         Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
        }
        return null;
    } 主要还有就是注册权限:
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission> 操作 用数据库: public Cursor select(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy){
  //SQLiteDatabase db=this.getReadableDatabase();
  SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);//databaseFilename的值:(final String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath()+ "/download";
 final String DATABASE_FILENAME = "sms.db";
    String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;)就是开始文件复制的路径
  Cursor cursor=db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
  return cursor;
 }//yhqbsand
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值