Android:将资产sqlite数据库复制到数据库控制器时出错
我想在我的应用程序中使用预填充数据库,因此我找到了此代码Android:将资产sqlite数据库复制到数据库控制器时出错,android,database,file,copy,fileoutputstream,Android,Database,File,Copy,Fileoutputstream,我想在我的应用程序中使用预填充数据库,因此我找到了此代码 DB_NAME = "urg1718.sqlite" public SQLiteDatabase openDatabase() { File dbFile = context.getDatabasePath(DB_NAME); String path = dbFile.getAbsolutePath(); Log.i("path", "openDatabase: " + path); if (!dbFi
DB_NAME = "urg1718.sqlite"
public SQLiteDatabase openDatabase() {
File dbFile = context.getDatabasePath(DB_NAME);
String path = dbFile.getAbsolutePath();
Log.i("path", "openDatabase: " + path);
if (!dbFile.exists()) {
try {
//the file doesn't exist yet so this function is called
copyDatabase(dbFile);
} catch (IOException e) {
throw new RuntimeException("Error creating source database", e);
}
}
//check if the database is present in the folder
Log.i("database", "openDatabase: " + dbFile.exists());
return SQLiteDatabase.openDatabase(dbFile.getPath(), null, SQLiteDatabase.OPEN_READONLY);
}
private void copyDatabase(File dbFile) throws IOException {
//pre fil database
InputStream is = context.getAssets().open(DB_NAME);
try {
//where the error occurs
OutputStream os = new FileOutputStream(dbFile);
byte[] buffer = new byte[1024];
while (is.read(buffer) > 0) {
os.write(buffer);
}
os.flush();
os.close();
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();;
} catch (IOException e) {
e.printStackTrace();
}
}
“OutputStream os=new FileOutputStream”捕获以下错误
java.io.FileNotFoundException: /data/data/jle.urgdegarde17_18/databases/urg1718: open failed: ENOENT (No such file or directory)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:456)
W/System.err: at java.io.FileOutputStream.(FileOutputStream.java:87)
W/System.err: at java.io.FileOutputStream.(FileOutputStream.java:127)
W/System.err: at java.io.FileOutputStream.(FileOutputStream.java:116)
W/System.err: at jle.urgdegarde17_18.AssetDatabaseOpenHelper.copyDatabase(AssetDatabaseOpenHelper.java:49)
W/System.err: at jle.urgdegarde17_18.AssetDatabaseOpenHelper.openDatabase(AssetDatabaseOpenHelper.java:35)
W/System.err: at jle.urgdegarde17_18.Chargement.isStoragePermissionGranted(Chargement.java:40)
W/System.err: at jle.urgdegarde17_18.Chargement.onCreate(Chargement.java:18)
W/System.err: at android.app.Activity.performCreate(Activity.java:5990)
W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
W/System.err: at android.app.ActivityThread.access$800(ActivityThread.java:151)
W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err: at android.os.Looper.loop(Looper.java:135)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5254)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
W/System.err: at libcore.io.Posix.open(Native Method)
W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:442)
W/System.err: ... 20 more
java.io.FileNotFoundException:/data/data/jle.urgdegarde17_18/databases/urg1718:open failed:enoint(没有这样的文件或目录)
W/System.err:at libcore.io.IoBridge.open(IoBridge.java:456)
W/System.err:at java.io.FileOutputStream.(FileOutputStream.java:87)
W/System.err:at java.io.FileOutputStream.(FileOutputStream.java:127)
W/System.err:at java.io.FileOutputStream.(FileOutputStream.java:116)
W/System.err:jle.urgdegarde17_18.AssetDatabaseOpenHelper.copyDatabase(AssetDatabaseOpenHelper.java:49)
W/System.err:jle.urgdegarde17_18.AssetDatabaseOpenHelper.openDatabase(AssetDatabaseOpenHelper.java:35)
W/System.err:在jle.urgdegarde17_18.Chargement.IsStorage许可已授予(Chargement.java:40)
W/System.err:jle.urgdegarde17_18.Chargement.onCreate(Chargement.java:18)
W/System.err:at-android.app.Activity.performCreate(Activity.java:5990)
W/System.err:at-android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
W/System.err:at-android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
W/System.err:at-android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
W/System.err:android.app.ActivityThread.access$800(ActivityThread.java:151)
W/System.err:at-android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
W/System.err:at-android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err:at-android.os.Looper.loop(Looper.java:135)
W/System.err:at-android.app.ActivityThread.main(ActivityThread.java:5254)
W/System.err:at java.lang.reflect.Method.invoke(本机方法)
W/System.err:at java.lang.reflect.Method.invoke(Method.java:372)
W/System.err:com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
W/System.err:com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
W/System.err:原因:android.System.ErrnoException:打开失败:enoint(没有这样的文件或目录)
W/System.err:at libcore.io.Posix.open(本机方法)
W/System.err:at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
W/System.err:at libcore.io.IoBridge.open(IoBridge.java:442)
W/System.err:。。。20多
我尝试使用getDatabasePath()、getDatabasePath().getAbsolutePath()并直接将这些函数返回的字符串放入FileOutputStream
getDatabasePath(), getDatabasePath().getAbsolutePath()
FileOutputStream
我还试图从数据库名称中删除“.sqlite”
我不明白我做错了什么
谢谢。请参考此感谢,朋友!!!非常感谢你的朋友!!!