HappyIdiom之五数据库操作之如何导入外部已有的数据库

来源:互联网 发布:淘宝售后的工资 编辑:程序博客网 时间:2024/04/29 12:07

导入:

        我们平时见到的android数据库操作一般都是在程序开始时创建一个空的数据库,然后再进行相关操作。这个我们就比较好做了,因为这个数据库是我们一开始就跟着这个应用走的,那么我们有的时候不可能什么都是自己去做的。我们要是需要使用一个已有数据的数据库怎么办呢?大家想一想在android系统下数据库应该存放在什么地方呐,我们要是知道数据库存放在什么地方就好办了,现在大家有没有思路了。没有的话,就跟我们dev慢慢的来做。我们知道android的数据库存放在/data/data/com.*.*(package name)/ 目录下,所以我们需要做的是把已有的数据库传入那个目录下。操作方法是用FileInputStream读取原数据库,再用 FileOutputStream把读取到的东西写入到那个目录。这样就可以了,大家这回明白了吧,那么我就来看看在代码中是怎么实现的。

Step1:把原数据库包括在项目源码的res/raw目录下,然后建立一个DBHelper类

/** * 实现将数据库文件从raw目录拷贝到手机里存放数据库的位置 * @author Administrator */public class DBHelper {private final int BUFFER_SIZE = 400000;public static final String DB_NAME = "idiom.db"; // 保存的数据库文件名public static final String PACKAGE_NAME = "com.bzu.happyidiom.controller";// 应用的包名public static final String DB_PATH = "/data"+ Environment.getDataDirectory().getAbsolutePath() +"/"+ PACKAGE_NAME+ "/databases"; // 在手机里存放数据库的位置//sdcard的路径//public static final String DB_PATH = Environment.getExternalStorageDirectory().getAbsolutePath()+"/idiom";private Context context;public DBHelper(Context context) {this.context = context;}public SQLiteDatabase openDatabase() {try {File myDataPath = new File(DB_PATH);if (!myDataPath.exists()){myDataPath.mkdirs();// 如果没有这个目录则创建}String dbfile=myDataPath+"/"+DB_NAME;if (!(new File(dbfile).exists())) {// 判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库InputStream is = context.getResources().openRawResource(R.raw.idiom); // 欲导入的数据库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.close();is.close();}SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,null);return db;} catch (FileNotFoundException e) {Log.e("Database", "File not found");e.printStackTrace();} catch (IOException e) {Log.e("Database", "IO exception");e.printStackTrace();}return null;}}

Step2:搭建单元测试环境,测试数据库有没有创建到指定的路径下面

public class IdiomDaoTest extends AndroidTestCase {    public void testCreateDB(){    DBHelper dbHelper=new DBHelper(getContext());    dbHelper.openDatabase();    }}


 

 

   

原创粉丝点击