将外部sqlite3数据库导入到Android项目中(android studio)

第一步:将数据库文件放入到assets目录中。注意android studio需要将assets目录建在main项目下。即和java,res等文件夹是同级的。


第二步:首次使用app,将assets目录下的数据库文件加载到android手机的sd下



    /**
     * 见assets目录下的文件拷贝到sd上
     * @return 存储数据库的地址
     */

    // 复制和加载区域数据库中的数据
    public static String  CopySqliteFileFromRawToDatabases(String SqliteFileName) throws IOException {

        // 第一次运行应用程序时,加载数据库到data/data/当前包的名称/database/<db_name>

        File dir = new File("data/data/" + MyApplication.getContext().getPackageName() + "/databases");
        LogUtil.i("!dir.exists()=" + !dir.exists());
        LogUtil.i("!dir.isDirectory()=" + !dir.isDirectory());

        if (!dir.exists() || !dir.isDirectory()) {
            dir.mkdir();
        }

        File file= new File(dir, SqliteFileName);
        InputStream inputStream = null;
        OutputStream outputStream =null;

        //通过IO流的方式,将assets目录下的数据库文件,写入到SD卡中。
        if (!file.exists()) {
            try {
                file.createNewFile();

                inputStream = MyApplication.getContext().getClass().getClassLoader().getResourceAsStream("assets/" + SqliteFileName);
                outputStream = new FileOutputStream(file);

                byte[] buffer = new byte[1024];
                int len ;

                while ((len = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer,0,len);
                }


            } catch (IOException e) {
                e.printStackTrace();

            }

            finally {

                if (outputStream != null) {

                        outputStream.flush();
                        outputStream.close();

                    }
                if (inputStream != null) {
                    inputStream.close();
                }

                }

            }

        return file.getPath();

        }



第三不:使用sd下的数据库文件。


    /**
     * 获取全国的省份
     *
     * @return
     */

    public void getProvincesFromSQLite() {

        SQLiteDatabase sqLiteDatabase = SQLiteDatabase.openDatabase(sqliePath, null, SQLiteDatabase.OPEN_READONLY);

        Cursor cursor = sqLiteDatabase.rawQuery("SELECT * from T_Province", null);

        provincesList.clear();
        if (cursor.moveToFirst()) {

            do {

                String proSort = cursor.getString(cursor.getColumnIndex("ProSort"));
                String proName = cursor.getString(cursor.getColumnIndex("ProName"));

                provincesList.add(new Province(proSort,proName));

            }while (cursor.moveToNext());


            cursor.close();

        }


        provinceAdapter.notifyDataSetChanged();


    }





版权声明:本文为u013680097原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。