2011-08-02 59 views
12

我在做數據庫syn。在sql server和sqlite之間下載數據。如果在sqlite中更新/插入記錄時出現了一些情況,互聯網連接速度很慢或下降,那麼需要回滾。這是可能的代碼或如何使用Transaction在這裏。Android 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); 
} 

請幫幫我。

在此先感謝...

回答

0

這種插入是通過檢查變量n你可以找到數據是否被插入或not.There是沒有什麼it.No之間需要在這裏的任何交易影響只有一個table.So。

0

如果您的意思是回滾,刪除添加的行;這很容易...你可以添加一個TIMESTAMP到每個添加的行並將其值設置爲System.currentTimeMillis() ...保存第一個System.currentTimeMillis(),如果你想回滾你可以從表DELETE保存時間戳後添加的所有行你的程序


看來你只更新表,你有一個完整的行後......這裏是一個代碼,這將有助於你確定手機仍然連接到網絡,因此,你可以繼續恢復行或不行。如果連接


manifest

檢查並繼續

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

38

這裏的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方法總是拋出異常)。

注意,您不需要明確地回滾。如果您在沒有.setTransactionSuccessful()的情況下調用db.endTransaction(),它將自動回滾。

只記得總是把setTransactionSuccessful你最後的SQLException拋出方法:)

你可以很容易與其他catch塊擴展此之後,趕上了網絡超時例外。