我在Titanium for Android中编程。 我有6个sqlite数据库,我不想将它们存储在设备内部存储器中,因为DB数量太大。
那么,如何以编程方式将sqlite文件移动到SD卡?或者,当用户从PlayStore安装我的应用程序时,如何直接在SD卡上安装Dbs?
PD:我尝试添加“PreferExternal”,但这并没有解决我的问题。
<manifest android:installLocation="preferExternal</manifest>
提前感谢!
答案 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:
在清单文件中,定义权限如下所示:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
对于代码下方的复制文件,
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());
}