2011-08-02 25 views
12

Veritabanı senkronizasyonu yapıyorum. Sqlite ve sqlite arasında veri indirme. Eğer sqlite içinde kayıtları güncellerken/eklerken bazı koşullar varsa, internet bağlantısı yavaş veya düşüyorsa o zaman geri dönmesi gerekir. Bu kodda mümkün olabilir ya da İşlem burada nasıl kullanılır.Android sqlite geri alma

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

Lütfen bana yardım edin.

Şimdiden teşekkürler ...

cevap

0

Bu ekleme değişkeni kontrol n veri takılı olup olmadığını bulabilirsiniz veya not.There it.No Burada herhangi İşlem ihtiyaç arasına başka bir şey değildir tarafından tek table.So etkilemektedir.

0

Geriye dönüş yaparak, eklenen satırları silmek istediğinizde; Bu oldukça kolay ... Eklenen her satır için bir TIMESTAMP ekleyebilir ve değerini System.currentTimeMillis() olarak ayarlayabilirsin ... İlk System.currentTimeMillis()'u kaydedebilir ve geri almak isterseniz zaman damgasından sonra eklenen tüm satırları tablodan DELETE yapabilirsiniz programınız size bir tam satır var sonra sadece tablo güncelliyoruz görünüyor


... İşte telefon hala ağa bağlı olup olmadığını belirlemeye yardımcı olacak bir koddur ve buna göre yapabilirsiniz Satırların tekrarlanmasına devam edin veya devam etmeyin.


manifest

Kontrol bağlanıp İşte (db aşağıdaki bir SQLiteDatabase örneğidir) SQLite'ta hareketleri kullanarak kısa örnek

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

38

devam ederse:

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

Dikkat edin, hangi yöntemle "// sql'nizin içeriklerini" değiştirmeyi seçerseniz seçin. InsertOrThrow() öğesini kullanın veya daha fazla esneklik SQLiteStatement örneğine ihtiyacınız varsa (bunların .execute yöntemleri her zaman hata istisnaları atar).

Dikkat, açıkça geri almanıza gerek yoktur. .setTransactionSuccessful() olmadan db.endTransaction() yöntemini çağırırsanız, otomatik olarak geri alınır.

Sadece ağ zaman aşımı için istisnalar yakalamak için, son SQLException atma yöntemlerine :) Kolay başka yakalamak bloğu ile bu uzanabilir

sonra setTransactionSuccessful koymak her zaman hatırlıyorum.