微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以编程方式将DB文件从原始文件夹复制到Android中的项目数据库

如何解决如何以编程方式将DB文件从原始文件夹复制到Android中的项目数据库

我有offlinedictionary.db,其中包含我的Android应用所需的所有表和信息 我将该数据库文件保留在原始文件夹中,并使用以下逻辑将数据库复制到我的项目数据库路径。

DbHelper.java

import android.content.Context;
import android.database.sqlException;
import android.database.sqlite.sqliteDatabase;
import android.database.sqlite.sqliteOpenHelper;
import android.util.Log;

import androidx.annotation.Nullable;

import com.android.db.R;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class DbHelper  extends sqliteOpenHelper {

    private static String DB_PATH;

    private sqliteDatabase mDataBase;
    private final Context mContext;

    private static int DB_VERSION = 1;

    private static String FirsT_DB_PATH;

    private static final String DATABASE_NAME = "offlinedictionary.db";

    private static final String LOG_TAG = "DBHelper";


    public DbHelper(@Nullable Context context) {
        super(context,DATABASE_NAME,null,DB_VERSION);

        if (android.os.Build.VERSION.SDK_INT >= 4.2) {
            DB_PATH = context.getApplicationInfo().dataDir + "/databases/";

        } else {
            DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
        }
        Log.d(LOG_TAG,"database path: "+DB_PATH);

        mContext = context;
    }

    public void createDataBase() throws IOException {

        // If database not exists copy it from the assets

        boolean mDataBaseExist = checkDataBase();
        Log.d(LOG_TAG,"createDataBase: mDataBaseExist "+mDataBaseExist);

        if (!mDataBaseExist) {
            this.getReadableDatabase();
            this.close();
            try {
                // copy the database from assests
                copyDataBase();
                Log.e("DataBaseHelper","createDatabase database created");
            } catch (IOException mIOException) {
                throw new Error("Error copying DataBase");
            }
        }

    }

    private boolean checkDataBase() {
        File dbFile = new File(DB_PATH + DATABASE_NAME);
        //Log.v("dbFile",dbFile + "   "+ dbFile.exists());

        Log.d(LOG_TAG,"checkDataBase: dbFile "+dbFile);
        Log.d(LOG_TAG,"checkDataBase: dbFile.exists() "+dbFile.exists());
        return dbFile.exists();
    }

    private void copyDataBase() throws IOException {


        InputStream mInput = mContext.getResources().openRawResource(R.raw.offlinedictionary);
        String outFileName = DB_PATH;
        OutputStream mOutput = new FileOutputStream(outFileName);
        Log.d(LOG_TAG,"copyDataBase: mInput "+mInput);
        Log.d(LOG_TAG,"copyDataBase: outFileName "+outFileName);
        Log.d(LOG_TAG,"copyDataBase: mOutput "+mOutput);
        byte[] mBuffer = new byte[1024];
        int mLength;
        while ((mLength = mInput.read(mBuffer)) > 0) {
            mOutput.write(mBuffer,mLength);
        }
        mOutput.flush();
        mOutput.close();
        mInput.close();

    }

    public void openDataBase() throws sqlException {

        // Open the database
        String myPath = DB_PATH + DATABASE_NAME;
        mDataBase = sqliteDatabase.openDatabase(myPath,sqliteDatabase.OPEN_READONLY);

        FirsT_DB_PATH = mContext.getDatabasePath("offlinedictionary").toString();

    }

    @Override
    public synchronized void close() {

        if (mDataBase != null)
            mDataBase.close();

        super.close();

    }



    @Override
    public void onCreate(sqliteDatabase db) {

        try {

            Log.d(LOG_TAG,"Create Database");
            createDataBase();
        } catch (IOException e) {
            e.printstacktrace();
        }


     
    }

    @Override
    public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {

    }
}

添加了一些日志:

2020-08-25 09:49:32.145 9432-9432/? D/DBHelper: database path: /data/user/0/com.android.db/databases/
2020-08-25 09:49:32.635 9432-9432/? D/DBHelper: database path: /data/user/0/com.android.db/databases/
2020-08-25 09:49:32.683 9432-9432/? D/DBHelper: Create Database
2020-08-25 09:49:32.684 9432-9432/? D/DBHelper: checkDataBase: dbFile /data/user/0/com.android.db/databases/offlinedictionary.db
2020-08-25 09:49:32.684 9432-9432/? D/DBHelper: checkDataBase: dbFile.exists() true
2020-08-25 09:49:32.684 9432-9432/? D/DBHelper: createDataBase: mDataBaseExist true

现在在以上日志中,它显示DB文件存在于项目数据库路径中,并创建了offlinedictionary.db。 但是我的原始文件夹中的数据库文件没有被复制。

上面的逻辑有问题吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。