android指定sqlite路径,更改数据库默认存储位置

1,android默认的sqlite数据库是放在/data/data/appPackagename/database目录下的。

2,要修改db路径,只要在创建数据库的时候,更改db的路径的就可以了。 

具体代码如下:

TestDataBaseOperation.java

public class TestDataBaseOperation {

    //数据库名称
    private static final String DB_NAME = "test.db";
    private static  String DB_PATH = "";

    private final Context mContext;
    private static TestDataBaseOperation instance;

    private TestDataBaseOperation(Context context){
        this.mContext = context;

        DB_PATH =  DbHelper.getFilePath(context) + File.separator + DB_NAME;

        DbHelper.getInstance(mContext, DB_PATH);
    }

    /**
     * @param context 传入上下文
     */
    public synchronized static TestDataBaseOperation getInstance(Context context){
        if (instance == null && context != null){
            instance = new TestDataBaseOperation(context);
        }
        return instance;
    }
}

DbHelper.java 

public class DbHelper extends SQLiteOpenHelper {
    private final String TAG = "DbHelper ";

    /**
     * 数据库的版本号,以后要升级数据库,修改版本号为 +1 即可
     */
    public static final int DATABASE_VERSION = 1;


    private static DbHelper instance;
    /**
     * @param context 传入上下文
     * @return 返回DbHelper对象
     */
    public synchronized static DbHelper getInstance(Context context, String DATABASE_NAME){
        if (instance == null){
            instance = new DbHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        return instance;
    }

    // 构造方法不对外暴露
    public DbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    public static String getFilePath(Context context) {
        String filePath;
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {// 优先保存到SD卡中
            filePath = Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + File.separator + "MyDbData";
        } else {// 如果SD卡不存在,就保存到本应用的目录下
            filePath = context.getFilesDir().getAbsolutePath()
                    + File.separator + "MyDbData";
        }
        File file = new File(filePath);
        if (!file.exists()) {
            file.mkdirs();
        }

        return filePath;
    }

    /**
     * 数据库创建
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.i(TAG, "onCreate");
    }

    /**
     * 数据库升级
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.i(TAG, "onUpgrade");
    }
}

如此:DATABASE_NAME的默认路径就修改完成了。可以在文件管理中查看。 

猜你喜欢

转载自blog.csdn.net/weixin_42602900/article/details/131174029