2014-04-14 46 views
0

我想将我的sqlite数据库文件上传到DropBox。但在此之前,我需要获取代码中的sqlite Db文件。我怎样才能在任何设备上做到这一点?我检查了this链接,它说用户需要root权限才能访问数据库。以编程方式在文件中获取应用程序sqlite数据库

因此,在短期:

如何访问我的SQLite数据库与非root权限的设备?如File f = new File("path_to_db_file");

如果这种方法是不可能的,我该如何将我的应用程序数据库保存在一个我可以访问的地方?

请让我知道,如果我可以解释任何事情。谢谢你在前进

+0

以编程方式在SD文件夹上创建sqlite,那么您将不需要root用户的设备。如果你已经创建了一个sqlite数据库,那么如果你有有限的表,那么创建一个代码,它将读取这些表中的值,并在SD卡的另一个位置创建它们的副本。 – Kedarnath

+0

@Kedarnath谢谢你的评论,你知道如何在指定位置创建数据库吗?目前我的数据库类正在扩展SQLiteOpenHelper – user3524019

+0

http://stackoverflow.com/a/7227851/3330969 – Kedarnath

回答

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

你确定你的设备没有root?每次尝试解决方案时,我都会收到一个没有发现异常的文件 – user3524019

+0

我是一个懒惰的人,所以我没有任何确定的设备,因为该过程有时会有很多步骤。可能是数据库的路径不正确吗?您可以使用下一行获取路径:context.getDatabasePath(DB_NAME).toString(); – Izuel

+1

谢谢你的建议,我已经尝试过,但我只是得到FileNotFound异常,失败 – user3524019

0

我不知道有关以编程方式,但使用植根设备我们可以从设备获取数据库中,我们必须做的权限将您的应用作为超级用户并从您的应用程序包名称和过去复制到您的SD卡和Access。

相关问题