У меня небольшая проблема с изменением пути к моей базе данных в моем пользовательском databaseHelper.class
. Поэтому в начале я поместил базу данных в папку базы данных по умолчанию во Внутреннем хранилище, но теперь я хочу поместить ее в files/documents/users/servername/data
, но когда я изменяю строку, которая инициализирует мой путь хранения, база данных, которая там находится, пуста. Я забыл упомянуть, что на самом деле у меня есть файл sqlite в папке ресурсов моего приложения, и я копирую этот файл во внутреннюю память. Итак, вот фрагмент кода, который я использую:
private static final int DATABASE_VERSION = 1;
private static String DB_PATH_PREFIX = "/data/data/";
private static String DB_PATH_SUFFIX = "/databases/";
public UserDatabaseHelper(Context context, // String dbname,
CursorFactory factory, int version) {
super(context,"stampii_tpl.sqlite", factory, version);
this.context = context;
Log.i(TAG, "Create or Open database : " + "stampii_tpl.sqlite");
}
private static void copyDataBase(Context aContext)
throws IOException {
// Open your local db as the input stream
InputStream myInput = aContext.getAssets().open("stampii_tpl.sqlite");
// Path to the just created empty db
String outFileName = getDatabasePath(aContext);
Log.i(TAG, "Check if create dir : " + DB_PATH_PREFIX
+ aContext.getPackageName() + DB_PATH_SUFFIX);
// if the path doesn't exist first, create it
File f = new File(DB_PATH_PREFIX + aContext.getPackageName()
+ DB_PATH_SUFFIX);
if (!f.exists())
f.mkdir();
Log.i(TAG, "Trying to copy local DB to : " + outFileName);
// Open the empty db as the output stream
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();
Log.i(TAG, "DB (" + "stampii_tpl.sqlite" + ") copied!");
}
private static boolean checkDatabase(Context aContext) {
SQLiteDatabase checkDB = null;
try {
String myPath = getDatabasePath(aContext);
Log.i(TAG, "Trying to conntect to : " + myPath);
checkDB = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READONLY);
Log.i(TAG, "Database " + "stampii_tpl.sqlite" + " found!");
checkDB.close();
} catch (SQLiteException e) {
Log.i(TAG, "Database " + "stampii_tpl.sqlite" + " does not exists!");
}
return checkDB != null ? true : false;
}
@SuppressWarnings("unused")
private static String getDatabasePath() {
return getDatabasePath(context);
}
private static String getDatabasePath(Context aContext) {
return DB_PATH_PREFIX + aContext.getPackageName() + DB_PATH_SUFFIX
+ "stampii_tpl.sqlite";
}
И если я попытаюсь изменить DB_PATH_SUFFIX
на: /files/documents/users/servername/data
база данных, которая у меня там, пуста и не имеет таблиц, которые созданы в файле из папки активов.
Так есть идеи, как это исправить?