#sqlite #flutter
#sqlite #flutter
Вопрос:
Я пытаюсь внедрить базу данных восстановления для своего приложения, чтобы охватить случай продления телефона.
Я только что загрузил свой файл базы данных «database.db» в Dropbox, и мне удается загрузить файл обратно, но всякий раз, когда я пытаюсь открыть базу данных после загрузки, я получаю исключение, и кажется, что файл возвращается каким-то образом поврежденным. Должен ли я сохранять ее в Dropbox или загружать с некоторыми конкретными параметрами?
E/SQLiteLog(16429): (26) file is not a database
D/SQLiteConnection(16429): Corruption detected - isPrimary: true, address: @2e80143
E/SQLiteDatabase(16429): Failed to open database '/data/user/0/com.testdropbox.test/app_flutter/database.db'.
E/SQLiteDatabase(16429): android.database.sqlite.SQLiteDatabaseCorruptException: file is not a database (code 26 SQLITE_NOTADB[26]): , while compiling: PRAGMA journal_mode
Future downloadTest() async {
if (await checkAuthorized(authorize: true)) {
Directory docsDirectory =
await pathProvider.getApplicationDocumentsDirectory();
String dbPath = join(docsDirectory.path, DB_NAME);
await _dbService.closeDb();
final result =
await Dropbox.download('/db/$DB_NAME', dbPath, (downloaded, total) {
print('progress $downloaded / $total');
});
print(result);
print(io.File(dbPath).statSync());
await _dbService.openDb();
}
}
Future uploadTest() async {
if (await checkAuthorized(authorize: true)) {
io.Directory docsDirectory =
await pathProvider.getApplicationDocumentsDirectory();
String filepath = join(docsDirectory.path, DB_NAME);
io.File(filepath).writeAsStringSync(
'contents.. from ' (io.Platform.isIOS ? 'iOS' : 'Android') 'n');
final result =
await Dropbox.upload(filepath, '/db/$DB_NAME', (uploaded, total) {
print('progress $uploaded / $total');
});
print(result);
var _content = await listFolder('');
print(_content);
}
}
Ответ №1:
Хорошо, мои объяснения по этому поводу, я перепутал переменную с путем и записывал текст и перезаписывал файл базы данных перед загрузкой dropbol в этой строке:
io.File(filepath).writeAsStringSync(
'contents.. from ' (io.Platform.isIOS ? 'iOS' : 'Android') 'n');