Titanium如何将DB移动到SD卡

时间:2014-07-09 08:58:44

标签: database sqlite titanium

我在Titanium for Android中编程。 我有6个sqlite数据库,我不想将它们存储在设备内部存储器中,因为DB数量太大。

那么,如何以编程方式将sqlite文件移动到SD卡?或者,当用户从PlayStore安装我的应用程序时,如何直接在SD卡上安装Dbs?

PD:我尝试添加“PreferExternal”,但这并没有解决我的问题。

<manifest android:installLocation="preferExternal</manifest>

提前感谢!

3 个答案:

答案 0 :(得分:2)

来自Ti.Database.open的Titanium文档。

在外部存储上打开数据库(Android) 将打开一个文件名为mydb2Installed且位于所提供的绝对路径的数据库。

if (Ti.Platform.name === 'android' && Ti.Filesystem.isExternalStoragePresent()) {
  var db2 = Ti.Database.open(Ti.Filesystem.externalStorageDirectory + 'path' + Ti.Filesystem.separator + 'to' + Ti.Filesystem.separator + 'mydb2Installed');
}

希望这可以解决问题。

答案 1 :(得分:0)

根据这个问题:Android: use SQLite database on SD Card (not using internal Android Data Store at all)

您可以使用:

 SQLiteDatabase.openOrCreateDatabase(String, SQLiteDatabase.CursorFactory) 

将您的路径作为第一个参数,将null作为第二个参数。 要获得SD卡的路径,请执行以下操作:

 Environment.getExternalStorageDirectory();

但请注意,对设备具有物理访问权限的每个人都可以访问数据库文件......

答案 2 :(得分:0)

我不知道钛。但是在android中你可以通过以下逻辑移动DB:

  1. 将您的Database.db文件复制到项目资产文件夹中。
  2. 在清单文件中,定义权限如下所示:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
  3. 现在使用从/ asset到设备的外部存储的代码复制数据库文件
  4. 对于代码下方的复制文件,

        try {
         // Open your local db as the input stream
         InputStream myInput = myContext.getAssets().open("your database file name");
    
         // Path to the just created empty db
         String outFileName = "path of external storage/<database_file_name>";
    
         OutputStream myOutput = new FileOutputStream(outFileName);
    
         // transfer bytes from the inputfile to the outputfile
         byte[] buffer = new byte[1024];
         int length;
         while ((length = myInput.read(buffer)) > 0) 
         {
           myOutput.write(buffer, 0, length);
         }
    
         // Close the streams
          myOutput.flush();
          myOutput.close();
          myInput.close();
         } 
         catch (Exception e) 
          {
           Log.e("error", e.toString());
          }