android 从外部导入数据库

先切换到project目录下

在这里插入图片描述
选择main目录,新建assets文件
在这里插入图片描述
新建文件之后,把数据库拷贝到assets目录下。

然后就开始拷贝数据库到系统默认路径下。

//拷贝数据库,并且使用数据库
public class DbManager {
    private static final String DB_NAME = "wordlist.db";
    private static final String PACKAGE_NAME = "com.example.wordhub";
    public static final String DB_PATH = "/data/data/" + PACKAGE_NAME + "/databases";   //数据库的绝对路径
    private SQLiteDatabase db;
    private Context context;

    /**
     * @param context Context 上下文
     */
    public DbManager(Context context) {
        this.context = context;
    }

    //对外提供拷贝数据库方法
    public void openDataBase() {
        this.db = openDataBase(DB_PATH + "/" + DB_NAME);
    }

    //获取打开的数据库
    public SQLiteDatabase getDb() {
        return db;
    }

    /**
     * 拷贝数据库的方法
     *
     * @param filePath String 数据库默认存储路径
     * @return SQLiteDatabase 返回数据库实例
     * @throws FileNotFoundException 找不到文件则抛出异常
     * @throws IOException           输入输出流错误,则抛出异常
     */
    private SQLiteDatabase openDataBase(String filePath) {
        try {
            File file = new File(DB_PATH);
            if (!file.exists()) {
                file.mkdir(); //如果文件目录不存在就创建此文件目录
            }
            File openfile = new File(filePath);
            if (!openfile.exists()) {
                InputStream inputStream = context.getResources().getAssets().open("wordlist.db"); //获取数据库输入流
                FileOutputStream fileOutputStream = new FileOutputStream(openfile); //文件输出流
                byte[] buffer = new byte[1024];
                int length = 0;
                while ((length = inputStream.read(buffer)) > 0) {
                    fileOutputStream.write(buffer, 0, length); //拷贝数据库到默认路径下
                }
                inputStream.close(); //关闭输入流
                fileOutputStream.close(); //关闭输出流
            }
            SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(filePath, null); //打开数据库
            return db;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;

    }

    //关闭数据库
    public void closeDataBase() {
        if (db != null) {
            db.close();
        }
    }

}

拷贝成功之后,就可以愉快的使用啦,以下是使用方法。

 DbManager manager = new DbManager(MyApplication.getContext());
 Cursor cursor = null;

先要获取context,我这里获取的是全局的context,方法如下。

/**
 * 获取全局context
 */
public class MyApplication extends Application {
    private static Context context;
    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext() {
        return context;
    }
}

实例化成功之后就可以,调用openDataBase()拷贝数据库,再调用getDb()方法获取数据库实例。

 manager.openDataBase();
 SQLiteDatabase db = manager.getDb();
 cursor = db.rawQuery("select * from Note", null);

最后别忘了关闭数据库

 manager.closeDataBase();
 cursor.close();
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值