Autore Topic: Transazione SQLITE  (Letto 796 volte)

Offline thebelfastboy

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +3
    • Mostra profilo
Transazione SQLITE
« il: 17 Novembre 2012, 11:52:31 CET »
0
Salve a tutti!
Dovrei effettuare una transazione sul database locale! Ho trovato delle guide ma non so se ho fatto bene!
Il salvataggio è ok, ma vorrei avere la certezza che, in caso di errore, il rollback sia eseguito. Questo è il mio codice:

Codice (Java): [Seleziona]
public int register(Farmer f, List<Farm> farmList, String phoneNumber)
        {
                int result = 1;
                db.beginTransaction();
                try
                {
                        ContentValues farmerValues = new ContentValues();
                        farmerValues.put("id", f.getId());
                        farmerValues.put("firstname", f.getFirstname());
                        farmerValues.put("lastname", f.getLastname());
                        farmerValues.put("pin", f.getPin());
                        farmerValues.put("email", f.getEmail());
                        farmerValues.put("secretKey", f.getSecretKey());
                        long n = db.insert("farmer", null, farmerValues);
                        Log.i("db", "insert farmer " + String.valueOf(n));
                       
                        for (int i=0; i<farmList.size(); i++)
                        {
                                Farm farm = farmList.get(i);
                                ContentValues farmValues = new ContentValues();
                                farmValues.put("id", farm.getId());
                                farmValues.put("name", farm.getName());
                                farmValues.put("agroRegion", farm.getAgroGeolocigalRegionId());
                                farmValues.put("farmerId", farm.getFarmerId());
                                n = db.insert("farm", null, farmValues);
                                Log.i("db", "insert farm " +  String.valueOf(n));
                        }
                       
                        ContentValues mobileValues = new ContentValues();
                        mobileValues.put("phoneNumber", Integer.valueOf(phoneNumber));
                        n = db.insert("mobile", null, mobileValues);
                        Log.i("db", "insert mobile " +  String.valueOf(n));
                       
                        ContentValues mobileHasFarmer = new ContentValues();
                        mobileHasFarmer.put("phoneNumber", Integer.valueOf(phoneNumber));
                        mobileHasFarmer.put("farmerId", f.getId());
                        n = db.insert("mobile_has_farmer", null, mobileHasFarmer);
                        Log.i("db", "insert mobile_has_farmer " +  String.valueOf(n));
                        db.setTransactionSuccessful();
                }
                catch (Exception e)
                {
                        Log.e("db", "error transaction");
                        result = 0;
                }
                finally
                {
                        db.endTransaction();
                        Log.i("db", "transaction ok");
                }      
                return result;
        }

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Transazione SQLITE
« Risposta #1 il: 17 Novembre 2012, 12:29:25 CET »
0
Il codice e' corretto, se vuoi testare il tutto basta che metti una throw new Exception() prima di richiamare setTransactionSuccessful.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Transazione SQLITE
« Risposta #2 il: 17 Novembre 2012, 13:35:43 CET »
0
Il codice e' corretto, se vuoi testare il tutto basta che metti una throw new Exception() prima di richiamare setTransactionSuccessful.
se vuoi farlo ancora più bello puoi fare un throw random (fai generare un booleano random), oppure, ancora meglio, test unit con Junit :D
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia