如何将数据库从Asset文件夹复制到Databases文件夹

10 浏览
0 Comments

如何将数据库从Asset文件夹复制到Databases文件夹

我怎样才能将我的现有数据库从资产文件夹移动到我的应用程序沙盒中,并将其用作本地数据库?非常感谢任何帮助。

0
0 Comments

问题的出现原因:

在使用数据库时,如果数据库文件不存在,需要从assets文件夹中复制数据库文件到Databases文件夹中,否则将无法操作数据库。

解决方法:

1. 修改DatabaseHandler类中的createDataBase()方法,代码如下:

public void createDataBase() throws IOException
{
    //如果数据库文件不存在,则从assets文件夹中复制数据库文件
    boolean mDataBaseExist = checkDataBase();
    if(!mDataBaseExist)
    {
        this.getReadableDatabase();
        this.close();
        try 
        {
            //复制数据库文件
            copyDataBase();
            System.out.println("createDatabase database created");
        } 
        catch (IOException mIOException) 
        {
            throw new Error("ErrorCopyingDataBase");
        }
    }
}

2. 添加checkDataBase()方法,代码如下:

private boolean checkDataBase()
{
    File dbFile = new File(DB_PATH + DB_NAME);
    return dbFile.exists();
}

3. 添加copyDataBase()方法,代码如下:

private void copyDataBase() throws IOException
{
    InputStream mInput = mContext.getAssets().open(DB_NAME);
    String outFileName = DB_PATH + DB_NAME;
    OutputStream mOutput = new FileOutputStream(outFileName);
    byte[] mBuffer = new byte[1024];
    int mLength;
    while ((mLength = mInput.read(mBuffer))>0)
    {
        mOutput.write(mBuffer, 0, mLength);
    }
    mOutput.flush();
    mOutput.close();
    mInput.close();
}

4. 在DatabaseHandler的构造方法中初始化DB_PATH变量,代码如下:

DB_PATH = context.getApplicationInfo().dataDir + "/databases/";

5. 调用createDataBase()方法来复制数据库文件,代码如下:

DatabaseHandler db = new DatabaseHandler(context);
try 
{
    db.createDataBase();
} 
catch (IOException io) 
{
    throw new Error("Unable to create database");
}

以上就是从Asset文件夹复制数据库文件到Databases文件夹的解决方法。

0