2016-06-19 2 views
0

SQLite는 (안드로이드)와 1 : 수는 항상 내 안드로이드 응용 프로그램이 SQLite는 테이블이

CREATE TABLE " + TABLE_NAME + " (" + 
     _ID + " INTEGER PRIMARY KEY AUTOINCREMENT" + 
     COMMA + COLUMN_NAME_SID + " INTEGER" + 
     COMMA + COLUMN_NAME_TITLE + " TEXT NOT NULL" + 
     COMMA + COLUMN_NAME_IS_MINE + " BOOLEAN NOT NULL" + 
     COMMA + COLUMN_NAME_CREATED_AT + " DATETIME" + 
     COMMA + COLUMN_NAME_CODE + " TEXT UNIQUE" + 
     COMMA + COLUMN_NAME_MSG + " INTEGER NOT NULL DEFAULT 0" + 
     ");"; 

나는 동일한 데이터와 기록의 번호를 업데이트

변경된 행 (행 영향) I 특정 레코드에서 동일한 데이터 업데이트를 수행 할 때 (MySQL은 같은) 다른 DBMS에서는

SQLiteDatabase db = m_helper.getWritableDatabase(); 
String where = COLUMN_NAME_SID + "=" + sid; 
ContentValues values = new ContentValues(); 
values.put(COLUMN_NAME_MSG, msg); 
int rowsAffected = db.update(TABLE_NAME, values, where, null); 
db.close(); 
// rowsAffected is always 1! 

1. 변경된 행의 수에 SQLite는 0으로 항상 인 Android가 다른가요?

+0

아마 데이터가 실제로 변경되었는지는 인식하지 못할 수도 있습니다. 데이터가 같더라도 모든 쿼리는 변경으로 계산됩니다. – Vucko

+0

나도 그렇게 생각한다. 그러나 그것은 이상하다. 기타 DBMS (MySQL과 같은)는 데이터가 변경되지 않으면 0을 반환합니다. – Alex

답변

1

데이터가 실제로 변경되었는지는 알 수 없습니다. 데이터가 같더라도 모든 쿼리는 변경으로 계산됩니다.

글쎄, 그들이 구현 한 방식입니다. 예를 들어 IntellIJ IDE에서 무언가를 작성하고 삭제하면 파일이 변경된 것으로 표시되지 않지만 Visual Studio에서 수행하는 경우 CTRL+Z을 수행하지 않으면 파일이 변경됩니다. 그것은 단지 다른 구현 방법입니다.

+0

그래서 다음과 같이 쿼리를 편집해야합니다. '[...] String = COLUMN_NAME_SID + "="+ sid + "AND"+ COLUMN_NAME_MSG + "<>"+ msg; [...]' 나는 다른 대안이 없습니까? – Alex

+0

흠, 아마도 예. 이렇게하면 변경 사항을 추적 할 수 있습니다. 좋은 아이디어입니다. – Vucko

관련 문제