我想将我的sqlite数据库文件上传到DropBox。但在此之前,我需要在代码中获取sqlite Db文件。我怎样才能在任何设备上执行此操作?我查看了this链接,它说用户需要root权限才能访问数据库。
简而言之:
如何使用非root设备访问我的sqlite数据库?例如File f = new File("path_to_db_file");
如果不可能采用这种方法,我如何将我的应用数据库保存在一个我可以访问它的地方?
如果我能解释一下,请告诉我。提前谢谢
答案 0 :(得分:0)
是的,你可以,这样的事情在没有root权限的情况下对我有用:
File Db = new File("/data/data/your.package/databases/yourdatabasename");
Date d = new Date();
File file = new File("your_destination.db");
file.setWritable(true);
copyFile(new FileInputStream(Db), new FileOutputStream(file));
复制文件是这样的函数,可以在两个方向上工作DB->文件和文件 - > DB:
public static void copyFile(FileInputStream fromFile, FileOutputStream toFile) throws IOException {
FileChannel fromChannel = null;
FileChannel toChannel = null;
try {
fromChannel = fromFile.getChannel();
toChannel = toFile.getChannel();
fromChannel.transferTo(0, fromChannel.size(), toChannel);
} finally {
try {
if (fromChannel != null) {
fromChannel.close();
}
} finally {
if (toChannel != null) {
toChannel.close();
}
}
}
}
答案 1 :(得分:0)
我不是以编程方式了解但是使用 Rooted Device 我们可以从设备获取数据库,因为我们必须以超级用户的身份对您的应用授予权限从您的应用包名称和过去复制到您的SD卡和Access。
答案 2 :(得分:0)
工作代码示例
try {
File Db = new File("/data/data/your.package/databases/yourdatabasename");
Date d = new Date();
File file = new File(your_destination.db);
//if file was created earlier the delete the old file
if (file.exists()) {
file.delete();
}
//create new file
file.createNewFile();
file.setWritable(true);
copyFile(new FileInputStream(Db), new FileOutputStream(file));
}catch (Exception e) {
e.printStackTrace();
}