Android 中打包数据库(已经建立而且含有数据)
2014-03-25 11:37
274 查看
现在在做一个android小应用,遇到了一个问题:怎么把我已经建立好的数据库(包含有数据,比如:地图中的线路)直接和程序一起打包成apk呢?
如果使用SQLiteOpenHelper数据库帮助类的话,每一个应用首次安装使用时都会新建一个数据库而且还得导入数据,麻烦!
或者直接在sd开中放入已经建立好的数据库,每次应用要的时候,直接读取。但是这样的话对于每一个新用户都得copy,new文件夹等。
然后就直接上代码咯
如果使用SQLiteOpenHelper数据库帮助类的话,每一个应用首次安装使用时都会新建一个数据库而且还得导入数据,麻烦!
或者直接在sd开中放入已经建立好的数据库,每次应用要的时候,直接读取。但是这样的话对于每一个新用户都得copy,new文件夹等。
这里介绍一个更好的,其实也是参照网上的
就是把已经建立好的数据库放在res文件夹里的raw文件夹里,也可以放到assets里,因为这两个文件夹不会在生成APK的时候不会被压缩 .
然后就直接上代码咯public class LogoActivity extends Activity { private final String DATABASE_PATH = android.os.Environment .getExternalStorageDirectory().getAbsolutePath() + "/databese"; private final String DATABASE_FILENAME = "searchofbus.db"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!checkDataBase()) { SQLiteDatabase db = openDatabase(); Log.i("ssssssss", "开始llllllLlLl" + db); } } public boolean checkDataBase() { SQLiteDatabase checkDB = null; try { String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME; checkDB = SQLiteDatabase.openDatabase(databaseFilename, null, SQLiteDatabase.OPEN_READONLY); } catch (SQLiteException e) { } if (checkDB != null) { checkDB.close(); } return checkDB != null ? true : false; } // //复制小于1M的数据库程序 public SQLiteDatabase openDatabase() { SQLiteDatabase database = null; try { // 获得dictionary.db文件的绝对路径 String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME; File dir = new File(DATABASE_PATH); if (!dir.exists()) dir.mkdir(); // 如果在/sdcard/dictionary目录中不存在 // dictionary.db文件,则从res\raw目录中复制这个文件到 // SD卡的目录(/sdcard/dictionary) if (!(new File(databaseFilename)).exists()) { // 获得封装dictionary.db文件的InputStream对象 InputStream is = LogoActivity.this.getResources() .openRawResource(R.raw.searchofbus); FileOutputStream fos = new FileOutputStream(databaseFilename); byte[] buffer = new byte[7168]; int count = 0; while ((count = is.read(buffer)) > 0) { fos.write(buffer, 0, count); } fos.close(); is.close(); } // 打开/sdcard/dictionary目录中的dictionary.db文件 database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null); return database; } catch (Exception e) { } return database; }
注:只要上述的db不为空,就说明已经成功了,大概的流程我说一下,程序首先会检测你指定的路径查询是否有数据库,如果有的话,那就可以直接执行后面的(自己应用的逻辑),但是如果没有的话呢?它就会去res下找数据,找到了之后就把它拷贝到指定的路径下,供以后使用。这个方案值局限与数据库文件小于1M的,如果大于1M的,也可以使用这个思路,但是就是在复制数据库的时候,要分割数据,再合并数据。
相关文章推荐
- android系统数据库中多个数据表含有变量插入操作
- android 将已经有数据的数据库文件导入项目
- android本地数据库的建立和操作,并同步到服务端数据
- 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建
- 使用SQLiteHelper创建数据库并插入数据 分类: H1_ANDROID 2013-11-05 22:44 1398人阅读 评论(0) 收藏
- android 数据库放到了sd卡中 ,设置,清除数据时没办法清空数据库.
- 手动修改Android数据库数据
- Android技术——数据库(二):SQLite数据库的建立和维护
- Android---把数据保存到数据库中(一)
- 数据库如何给含有外键的表中插入数据?
- Android开发—数据库应用—访问数据表(SQLite OpenHelper) —添加检索操作(Retrieve)
- Android扫描局域网内IP并建立Socket连接,和PC服务端收发数据
- [android]_[初级][插入短信数据到短信数据库]
- android数据库数据变化监听
- Android中给数据库表中添加数据
- 【Android 开发】:数据存储之 SQLite 数据库操作(二)
- android 数据库升级(保留原先数据)
- Android数据库升级,数据不丢失解决方案
- Android SQLite数据库存储之添加数据