Откат Android sqlite
Я использую базу данных syn. Загрузка данных между сервером sql и sqlite.Если некоторые обстоятельства при обновлении/вставке записей в sqlite, подключение к интернету происходит медленно или отбрасывается, тогда необходимо откат. Возможно ли это в этом коде или Как использовать транзакцию здесь.
public void insertTableRecords(String strTableName, String[] strToFields, String[] strValues){
DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(DownlaodTableActivity.this);
dbAdapter.openDataBase();
ContentValues initialValues = new ContentValues();
for(int i=0 ;i<strToFields.length;i++){
initialValues.put(strToFields[i],strValues[i]);
}
long n = dbAdapter.insertRecordsInDB(strTableName, null, initialValues);
System.out.println( " -- inserted status : --- " + n);
}
Пожалуйста, помогите мне.
Спасибо заранее...
Ответы
Ответ 1
Вот краткий пример использования транзакций в SQLite (db - экземпляр SQLiteDatabase в следующем):
try {
db.beginTransaction();
// your sql stuff
db.setTransactionSuccessful();
} catch(SQLException e) {
// do some error handling
} finally {
db.endTransaction();
}
Обратите внимание, что важно, чтобы какой бы метод вы ни выбрали для замены "//ваш sql файл" с помощью бросков и исключений. Используйте insertOrThrow() или если вам нужны дополнительные экземпляры SQLiteStatement с гибкостью (их методы .execute всегда вызывают исключения при ошибке).
Обратите внимание: вам не нужно явно откатываться. Если вы вызовете db.endTransaction() без .setTransactionSuccessful(), он автоматически откатится.
Просто запомните, всегда ставьте setTransactionSuccessful после ваших последних методов металокации SQLException:)
Вы можете легко расширить это с помощью другого блока catch, чтобы поймать исключения для сетевых тайм-аутов.
Ответ 2
Эта вставка производит только одну таблицу. Таким образом, проверяя переменную n, вы можете найти, вставлены ли данные или нет. Между ней нет ничего. Здесь нет никакой транзакции.
Ответ 3
Если вы имеете в виду откат, удаление добавленных строк; это довольно просто... Вы можете добавить TIMESTAMP для каждой добавленной строки и установить ее значение в System.currentTimeMillis()
... Сохранить первый System.currentTimeMillis()
, и если вы хотите откат, вы можете DELETE
из таблицы все строки добавляется после отметки времени, сохраненной в вашей программе
Кажется, вы обновляете таблицу только после того, как у вас есть одна полная строка... Вот код, который поможет вам определить, все ли телефон подключен к сети, и, соответственно, вы можете продолжить восстановление строк или нет.
manifest
Проверьте, подключены ли и продолжайте
ConnectivityManager conManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = conManager.getActiveNetworkInfo();
if(networkInfo.isConnected()){
//YOUR CODE
}