2011-08-02 28 views
12

Tôi đang thực hiện đồng bộ hóa cơ sở dữ liệu. Tải xuống dữ liệu giữa máy chủ sql và sqlite.Nếu có một số trường hợp trong khi cập nhật/chèn bản ghi trong sqlite, kết nối internet chậm hoặc giảm sau đó cần phải quay lại. Có thể trong mã này hoặc Cách sử dụng Giao dịch tại đây.Cuộn ngược sqlite Android

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

Hãy giúp tôi.

Cảm ơn trước ...

Trả lời

0

chèn này được thực chỉ có một table.So bằng cách kiểm tra biến n bạn có thể tìm cho dù dữ liệu được chèn hoặc not.There là không có gì ở giữa it.No cần bất kỳ giao dịch ở đây.

0

Nếu bạn muốn khôi phục, hãy xóa các hàng đã thêm; điều này khá dễ dàng ... Bạn có thể thêm dấu thời gian cho mỗi hàng đã thêm và đặt giá trị của nó thành System.currentTimeMillis() ... Lưu System.currentTimeMillis() đầu tiên và nếu bạn muốn khôi phục, bạn có thể DELETE từ bảng tất cả các hàng được thêm sau dấu thời gian được lưu trong chương trình của bạn


Có vẻ như bạn chỉ cập nhật bảng sau khi bạn có một hàng hoàn chỉnh ... Dưới đây là mã giúp bạn xác định xem điện thoại có được kết nối với mạng hay không và bạn có thể tiếp tục retreival của các hàng hay không.


manifest

Kiểm tra xem kết nối và tiếp tục

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

38

Dưới đây là một ví dụ ngắn của việc sử dụng các giao dịch trong SQLite (db là một trường hợp SQLiteDatabase ở sau):

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

Lưu ý, điều quan trọng là bất kỳ phương pháp nào bạn chọn để thay thế "// công cụ sql của bạn" với các lần ném và ngoại lệ. Sử dụng insertOrThrow() hoặc nếu bạn cần các cá thể SQLiteStatement linh hoạt hơn (các phương thức .execute của chúng ta luôn ném ra các ngoại lệ về lỗi).

Thông báo, bạn không cần phải quay lại một cách rõ ràng. Nếu bạn gọi db.endTransaction() mà không có .setTransactionSuccessful() nó sẽ tự động quay trở lại.

Chỉ cần nhớ luôn đặt setTransactionSuccessful sau khi phương pháp ném SQLException cuối cùng của bạn :)

Bạn dễ dàng có thể mở rộng này với một khối catch, để bắt các ngoại lệ cho outs thời gian mạng.