2011-08-02 26 views
12

Estoy haciendo base de datos syn. Descargar datos entre el servidor sql y sqlite. Si hay alguna circunstancia durante la actualización/inserción de registros en sqlite, la conectividad a Internet es lenta o desaparece y luego tiene que retroceder. Es posible en este código o Cómo usar la transacción aquí.Android sqlite rollback

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); 
} 

Por favor, ayúdame.

Gracias de antemano ...

Respuesta

0

Esta inserción está efectuando una sola table.So comprobando variable n se puede encontrar si se insertan datos o not.There es nada en el medio it.No necesita ninguna transacción aquí.

0

Si quiere decir "rollback", elimine las filas agregadas; esto es bastante fácil ... Usted podría agregar un TIMESTAMP a cada fila agregada y establecer su valor en System.currentTimeMillis() ... Guardar el primer System.currentTimeMillis() y si desea deshacerlo puede DELETE de la tabla todas las filas agregadas después de la marca de tiempo guardada en su programa


parece que sólo se está actualizando la tabla después de tener una fila completa ... Aquí hay un código que le ayudará a determinar si el teléfono todavía está conectado a la red, y, en consecuencia, puede continuar retreiving de las filas o no.


manifest

Comprobar si está conectado y continuar

ConnectivityManager conManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo networkInfo = conManager.getActiveNetworkInfo(); 
if(networkInfo.isConnected()){ 
    //YOUR CODE 
} 

38

Aquí hay una breve ejemplo del uso de las transacciones en SQLite (db es un ejemplo SQLiteDatabase en los siguientes):

try { 
    db.beginTransaction(); 
    // your sql stuff 
    db.setTransactionSuccessful(); 
} catch(SQLException e) { 
    // do some error handling 
} finally { 
    db.endTransaction(); 
} 

Nota, es importante que cualquiera que sea el método que elija para reemplazar "// sus cosas sql" con throws y excepción. Use insertOrThrow() o si necesita más flexibilidad instancias de SQLiteStatement (sus métodos .execute siempre arrojan excepciones en caso de error).

Observe que no es necesario desmantelar explícitamente. Si llama a db.endTransaction() sin .setTransactionSuccessful(), se retrotraerá automáticamente.

Sólo recuerde siempre poner setTransactionSuccessful después de su última SQLException métodos que lanzan :)

Se podría fácilmente extender esto con otro bloque catch, para atrapar excepciones para los tiempos fuera de la red.