[Android] 导入外部数据库

参考

  1. [Android]如何导入已有的外部数据库
  2. Android 将assets中的数据库导入到项目中databases

最初参考第一篇博文导入数据库,在虚拟机运行正常,但使用真机(华为)测试会报FileNotFoundException异常。经过一番查找,通过博文2得到解决。
原因:当判断文件不存在需先创建路径 dFile.mkdir();
个人猜测:Android虚拟机在创建项目后会自动生成/data/data/packagename/databases路径,而真机不可以,所以造成了以上问题。

操作过程:

DBManager.java

public class DBManager {    private static final String DB_NAME = "assistant.db"; //保存的数据库文件名    private static final String PACKAGE_NAME = "com.atlands.assistant";//包名    private static final String DB_PATH = "/data"            + Environment.getDataDirectory().getAbsolutePath() + "/"            + PACKAGE_NAME + "/databases";  //存放数据库的位置    private SQLiteDatabase database;    private Context context;    public DBManager(Context context) {        this.context = context;    }    public void openDatabase() {        File dFile = new File(DB_PATH);//判断路径是否存在,不存在则创建路径        if (!dFile.exists()) dFile.mkdir();        this.database = this.openDatabase(DB_PATH + "/" + DB_NAME);    }    private SQLiteDatabase openDatabase(String dbfile) {        try {            if (!(new File(dbfile).exists())) {                InputStream is = this.context.getResources().getAssets().open("assistant.db"); //欲导入的数据库                FileOutputStream fos = new FileOutputStream(dbfile);                int BUFFER_SIZE = 1028 * 10;                byte[] buffer = new byte[BUFFER_SIZE];                int count = 0;                while ((count = is.read(buffer)) > 0) {                    fos.write(buffer, 0, count);                }                fos.close();                is.close();            }            return SQLiteDatabase.openOrCreateDatabase(dbfile,                    null);        } catch (FileNotFoundException e) {            Log.e("Database", "File not found");            e.printStackTrace();        } catch (IOException e) {            Log.e("Database", "IO exception");            e.printStackTrace();        }        return null;    }    public void closeDatabase() {        this.database.close();    }}

MainActivity.java 使用工具类

//导入数据库dbHelper =new DBManager(this);dbHelper.openDatabase();dbHelper.closeDatabase();

更多相关文章

  1. Android 使用adb shell 和android studio插件Database Navigator
  2. 查看Sqlite 数据库
  3. Android 多媒体数据库
  4. Android SQLiteOpenHelper Sqlite数据库的创建与打开
  5. 使用android快速开发框架afinal的FinalDb操作android sqlite数据
  6. android 获取uri的正确文件路径的办法
  7. Android的sqlite3路径

随机推荐

  1. Android之Intents 和Intent Filters
  2. android onKeydown
  3. Android中的Context对象
  4. Android 摇一摇功能的实现
  5. 制作android native service
  6. android > 弹出复选框
  7. 【android 权限】
  8. android ndk 安装
  9. android在线API地址
  10. Android之HorizontalScrollView(一)