Подтвердить что ты не робот

Откат 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);
}

Пожалуйста, помогите мне.

Спасибо заранее...

4b9b3361

Ответ 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
}