Android 数据库转储

版权声明:没事随便转 https://blog.csdn.net/qq_41816123/article/details/84873258

先建一个工具类MigrateDBUtil

package com.example.myapplication2;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;


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

/**
 * @author a-yuexia
 * @data 2018-12-7
 */
public class MigrateDBUtil {
    private static final String TAG = "MigrateDBUtil";
    private static Context sContext;

    public static void migrateDB(Context context) {
        sContext = context;
        migrate();
        deleteOldDB();
    }

    /**
     * 判断data/data/packageName/database内是否存在kuaiyun.db,
     * 不存在,开始迁移.
     */
    private static void migrate() {
   		//你在转储之前要先创建一个数据库这样才有databases这个文件夹,不然会报空指针
        File file = new File("/data/data/com.example.myapplication2/databases/kuaiyu.db");
        if (!file.exists()) {
            FileOutputStream writer = null;
            InputStream reader = null;
            try {
                Log.d(TAG, "1: ");

                reader = sContext.getAssets().open("station.db");
                Log.d(TAG, "2: ");
                file.createNewFile();
                writer = new FileOutputStream(file);
                byte[] bytes = new byte[1024];
                int i;
                while ((i = reader.read(bytes)) != -1) {
                    writer.write(bytes, 0, i);

                }
                Log.d(TAG, "3: ");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (writer != null) {
                        writer.close();
                    }
                    if (reader != null) {
                        reader.close();
                    }
                } catch (IOException e) {
                }
            }
        }
    }

    /**
     * 初始化数据库
     * 迁移数据库 Version为1.
     */
    public static SQLiteDatabase initDatabase(Context context) {
        return DataBaseHelper.getInstance(context).getReadableDatabase();

    }

    private static void deleteOldDB() {
        sContext.deleteFile("station.db");
    }
}
station.db存放的位置和文件夹名称已及注意转储数据库的版本

像我的station.db是24那么我转储之后理性的就是25.总之不能比24低
在这里插入图片描述

		//创建个数据库生成databases文件夹
        DataBase dbHelper = new DataBase(MainActivity.this, "test_db",null,1);
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        //然后转储数据库
        MigrateDBUtil.migrateDB(MainActivity.this);
强调一下啊,你现在是有两个数据库,用哪个数据库的表就new哪个数据库注意版本version别返回主菜单就从2变成1,这不符合逻辑,
		DataBase dbHelper = new DataBase(StartActivity.this, "test_db",null,1);
        db = dbHelper.getWritableDatabase();
        //转存数据库引用
        dbstart=MigrateDBUtil.initDatabase(this);

DateBaseHelper

package com.example.myapplication2;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by a-yuexia on 2018/12/7.
 */

public class DataBaseHelper extends SQLiteOpenHelper{
    public final static String name = "kuaiyu.db";
    public static final int version = 25;
    private static DataBaseHelper dataBaseHelper = null;

    public DataBaseHelper (Context context) {
        super(context, name, null, version);

    }
    public static DataBaseHelper getInstance(Context context) {
        if (dataBaseHelper == null) {
            dataBaseHelper = new DataBaseHelper (context);
        }
        return  dataBaseHelper ;
    }

    public DataBaseHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

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

    }


}

小编忘记改类名自己弄一下

DateBase

package com.example.myapplication2;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by a-yuexia on 2018/12/7.
 */

public class DataBase extends SQLiteOpenHelper {
    public DataBase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String stu_table="create table startinfo(id integer primary key autoincrement,name text)";
        db.execSQL(stu_table);
    }

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

    }
}

好了数据库转储结束了
有什么疑问或者意见都可以联系我
QQ:2714730493

猜你喜欢

转载自blog.csdn.net/qq_41816123/article/details/84873258
今日推荐