2011-08-02 4 views
12

나는 데이터베이스 syn하고있다. SQL Server와 sqlite 사이에서 데이터 다운로드. sqlite에서 레코드를 업데이트/삽입하는 중 일부 상황이 발생하면 인터넷 연결 속도가 느려지거나 다시 롤백해야합니다.이 코드 또는 Transaction 사용 방법은 여기를 참조하십시오.안드로이드 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

확인 연결하고 여기에 (dB는 다음에의 SQLiteDatabase 인스턴스) SQLite는에 거래를 사용하는 간단한 예입니다

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

38

을 계속하는 경우 :

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

중요한 점은 "// SQL stuff"을 throw 및 예외로 바꾸는 방법을 선택하는 것입니다. insertOrThrow()를 사용하거나 더 유연한 SQLiteStatement 인스턴스가 필요한 경우 (해당 .execute 메서드는 항상 오류가 발생하면 예외를 throw합니다).

롤백을 명시 적으로 수행 할 필요가 없습니다. .setTransactionSuccessful()없이 db.endTransaction()을 호출하면 자동으로 롤백됩니다.

그냥 네트워크 시간 초과에 대한 예외를 잡으려고, 마지막되는 SQLException 던지는 방법 : 당신은 쉽게 다른 catch 블록에 이것을 확장 할 수

후 setTransactionSuccessful을 넣어 항상 기억한다.