2011-09-04 62 views
0

我很新的android和我试图导出我的数据库到SD卡,所以我可以将其导入到我的其他应用程序。试图将数据库导出到SDCARD

有什么建议吗?

Thanx提前。

+0

你能否详细到底为什么你要这个,如果这个交换应该在两个方向进行,等等 - 这听起来像你可能想要共享userId或ContentProvider。 –

+0

我有一个免费版本的应用程序。然后我做了一个有一些很好的升级。但我希望用户能够将其当前数据库导出到SDCARD,然后导入到付费版本。 – william

+1

您是否搜索过[实现免费/付费Android应用程序]的更一般问题(http://stackoverflow.com/search?q=android+%2Bfree+%2Bpaid)?这里有一些很好的答案,从共享用户ID到免费的应用程序和付费的“解锁”应用程序,无需重复您的整个应用程序。 –

回答

0

尽管这可能不是您尝试执行的最佳解决方案,但您的数据库已存储在/data/data/your.package.name中。您只需将其作为文件加载并保存到SD卡即可。检查这里的,这是否代码:

http://www.screaming-penguin.com/node/7749

+0

好的,在这种情况下,我将如何从一个本地数据库导入到另一个本地数据库?而不是导出到SDCARD然后再导入回来。 – william

+1

您可以在免费应用程序中创建一个内容提供程序,将整个数据库暴露给其他应用程序。然后在付费应用程序的第一次运行中,创建一个新的空数据库,通过查询Content Provider并填写新数据库从原始应用程序获取数据。 –

1

出口例如:

public void exportDB(){ 
    try { 
     File sd = Environment.getExternalStorageDirectory(); 
     if (sd.canWrite()) { 
      String currentDBPath = "data/data/com.mypack.myapp/databases/mydb.db"; 
      String backupDBPath = sd + "/filename.db"; 
      File currentDB = new File(currentDBPath); 
      File backupDB = new File(backupDBPath); 

      if (currentDB.exists()) { 
       FileChannel src = new FileInputStream(currentDB).getChannel(); 
       FileChannel dst = new FileOutputStream(backupDB).getChannel(); 
       dst.transferFrom(src, 0, src.size()); 
       src.close(); 
       dst.close(); 
       } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

导入是非常相似的出口:

public void importDB(){ 
    try { 
     File sd = Environment.getExternalStorageDirectory(); 
     if (sd.canWrite()) { 
      String currentDBPath = sd + "/filename.db"; 
      String backupDBPath = "data/data/com.mypack.myapp/databases/mydb_2.db"; 
      File currentDB = new File(currentDBPath); 
      File backupDB = new File(backupDBPath); 

      if (currentDB.exists()) { 
       FileChannel src = new FileInputStream(currentDB).getChannel(); 
       FileChannel dst = new FileOutputStream(backupDB).getChannel(); 
       dst.transferFrom(src, 0, src.size()); 
       src.close(); 
       dst.close(); 
       } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
相关问题