Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换sqlite表单资产_Java_Android_Sqlite - Fatal编程技术网

Java 替换sqlite表单资产

Java 替换sqlite表单资产,java,android,sqlite,Java,Android,Sqlite,首先为我的英语不好感到抱歉,因为我是法国人^^ 尝试用新数据库替换旧数据库时遇到问题以下是我的代码: //**************************** public static String DB_PATH; //**************************** public static String DB_NAME; public SQLiteDatabase database; public final Context context; private static

首先为我的英语不好感到抱歉,因为我是法国人^^

尝试用新数据库替换旧数据库时遇到问题以下是我的代码:

//****************************
public static String DB_PATH;
//****************************
public static String DB_NAME;
public SQLiteDatabase database;
public final Context context;
private static final String spots = "spots";
public static final int DATABASE_VERSION = 3;
public SQLiteDatabase getDb() {
    return database;
}

public ExternalDbOpenHelper(Context context, String databaseName) {
    super(context, databaseName, null, DATABASE_VERSION);
    this.context = context;
    String packageName = context.getPackageName();
    DB_PATH = String.format("//data//data//%s//databases//", packageName);
    DB_NAME = databaseName;
    openDataBase();
}

public void createDataBase() {
    boolean dbExist = checkDataBase();
    if (!dbExist) {
        this.getReadableDatabase();
        try {
            copyDataBase();
        } catch (IOException e) {
            Log.e(this.getClass().toString(), "Erreur pendant la copie de la base");
            throw new Error("Erreur pendant la copie de la base!");
        }
    } else {
        Log.i(this.getClass().toString(), "La base de donnée existe déja");
    }
}

private boolean checkDataBase() {
    SQLiteDatabase checkDb = null;
    try {
        String path = DB_PATH + DB_NAME;
        checkDb = SQLiteDatabase.openDatabase(path, null,
                SQLiteDatabase.OPEN_READONLY);
    } catch (SQLException e) {
        Log.e(this.getClass().toString(), "Erreur pendant la vérification de la base");
    }

    if (checkDb != null) {
        checkDb.close();
    }
    return checkDb != null;
}

private void copyDataBase() throws IOException {

    InputStream externalDbStream = context.getAssets().open(DB_NAME);
    String outFileName = DB_PATH + DB_NAME;
    OutputStream localDbStream = new FileOutputStream(outFileName);

    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = externalDbStream.read(buffer)) > 0) {
        localDbStream.write(buffer, 0, bytesRead);
    }
    localDbStream.close();
    externalDbStream.close();
}

public SQLiteDatabase openDataBase() throws SQLException {
    String path = DB_PATH + DB_NAME;
    if (database == null) {
        createDataBase();
        database = SQLiteDatabase.openDatabase(path, null,
            SQLiteDatabase.OPEN_READWRITE);
    }
    return database;
}
@Override
public synchronized void close() {
    if (database != null) {
        database.close();
    }
    super.close();
}

     @Override
public void onCreate(SQLiteDatabase db) {this.getReadableDatabase();
    try {
        copyDataBase();
    } catch (IOException e) {
        Log.e(this.getClass().toString(), "Erreur pendant la mise à jour de la base");
        throw new Error("Erreur pendant la copie de  la mise à jour de la base!");
    }
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.e(this.getClass().toString(), "Mise à jour de la base " + oldVersion + " vers " + newVersion );
    database.execSQL("DROP TABLE IF EXISTS  " + spots + ";");

    onCreate(database); //Creates a new one 
}
}

当我把数据库_VERSION=4放入数据库时,数据库没有被新的数据库替换。你能解释一下为什么要替换它吗。
谢谢。

当您实例化ExternalDbOpenHelper并检测到新版本时,将调用onUpgrade()。onUpgrade()的实现删除表点,然后调用onCreate()两次。但是,您的onCreate()方法为空。很抱歉,我刚刚复制了我所做的测试,以查看它是否崩溃。。应该只有onCreate(数据库);但是当我输入数字4时,我没有在我的logcat上看到“Miseájour de la base”+oldVersion+“vers”+newVersion,这意味着没有调用onUpgrade…不管怎样,onCreate()方法没有实现(即,它是空的)。如果没有调用onUpgrade(),那么检查安装的数据库的版本。尝试手动设置新数据库版本以强制升级,如db.setVersion(database_version);你能给我发一个测试版本的例子吗?因为我不知道这个版本号存储在哪里。