gpt4 book ai didi

java - SQLite 数据库不存在 Android

转载 作者:行者123 更新时间:2023-12-01 23:43:19 25 4
gpt4 key购买 nike

编辑:为了清晰起见删除了以前的代码

根据建议,我添加了日志消息以查看我在哪里被阻止。

看起来它正确地抛出了对 checkDatabase() 的调用,但没有返回复制数据库。这是我的 checkDatabase() 方法:

File dbFile = new File(DB_PATH + DB_NAME);
if(dbFile.exists()){
Log.d("True","Returned true");
return true;

}else{
dbFile.getParentFile().mkdirs();
Log.d("CreatedPath","Made the right directory");
return false;
}

在调试日志中,我可以看到“已创建路径”消息。就这样了。

然后返回 false,应该开始:

public void createDataBase() throws IOException{

boolean dbExist = checkDatabase();
if (!dbExist){

this.getReadableDatabase();

// Calling this method an empty database will be
// created into the default system path of
// the app so we can overwrite with FirstDB.


try{

copyDatabase();

}catch (IOException e) {
throw new Error("Error copying database");

}
}
}

但是,我根本没有看到这些日志消息。就像它返回 false 并且继续移动一样。

我需要再次调用createDataBase()吗?

最佳答案

我会尝试这个:

首先,更改路径字符串

private static String DB_PATH = "/data/data/com.example.mydbapp/databases/";

接下来,对文件进行相同的检查,但如果不存在则创建目录。无论如何你都必须这么做;这是 Android 的 SQLite 实现默认保存数据库的位置。

所以试试这个:

private boolean checkDatabase(){
File dbFile = new File(DB_PATH + DB_NAME);
if(dbFile.exists()){
return true;
}
else{
//This'll create the directories you wanna write to, so you
//can put the DB in the right spot.
dbFile.getParentFile().mkdirs();
return false;
}
}

无论如何,这只是通过谷歌搜索得出的,以及我的脑海中所知道的。链接在底部。

另外,我有点困惑:

    //YOU NAME THIS myInput:
InputStream myInput = firstDBContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream bnOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
//YOU READ FROM bnInput:
while ((length = bnInput.read(buffer)) > 0){
bnOutput.write(buffer, 0, length);
}

也许我在这里遗漏了一些东西,但是您不是从两个不同的输入流中读取内容吗?我也不明白为什么你在createDatabase()中调用这个函数:

    this.getReadableDatabase();

据我所知,该函数将调用 onCreate,后者调用 createDatabase,如果 checkDatabase() 返回 false,它将再次调用 onCreate。我用谷歌搜索的链接:

Java's createNewFile() - will it also create directories?

https://stackoverflow.com/a/9865386/2015759

http://docs.oracle.com/javase/7/docs/api/java/io/File.html#mkdirs%28%29

Create intermediate folders if one doesn't exist

祝你好运。

关于java - SQLite 数据库不存在 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17580564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com