2014-01-07 3 views
2

SqLite 데이터베이스에서 두 개의 필드를 업데이트하려고하지만 LogCat에 예외가 표시되지 않지만 작동하지 않는데 값을 가져 오는 동안이 특정 필드에 대한 값을 가져올 수 없습니다.업데이트 쿼리가 안드로이드에서 작동하지 않습니다

여기 제가 시도한 코드입니다.

try{ 
SQLiteDatabase db = openOrCreateDatabase("iTimeDB", MODE_PRIVATE, null); 
    Cursor cur =db.rawQuery("UPDATE Activities SET Details = '"+ detail_edit.getText().toString() +"' AND Time = '"+Ctime+"' WHERE ID = '" +ID+"'", null); 
    Log.d("Time", ID); 
    cur.close(); 
    db.close(); 
    } 
    catch(Exception e) 
    { 
    e.printStackTrace(); 
    Log.v("SSS", e.toString()); 
    } 

이 필드는 별도로 업데이트해야하지만 같은 문제가 발생합니다.

이 시도했지만 같은 결과는 laalto

db.execSQL("UPDATE Activities SET Details = ?, Time = ? WHERE ID = " + ID, 
    new String[] { 
     detail_edit.getText().toString(), 
     Ctime 
    }); 

답변

4

rawQuery()에 의해 aswered 어떠한 갱신

db.execSQL("UPDATE Activities SET Details = '" + detail_edit.getText().toString() + "', Time = '" + Ctime + "' WHERE ID = '" + ID + "'", null); 

솔루션 그냥 SQL을 컴파일하지 않습니다하지만 실행하지는 않습니다. 대신 execSQL()을 사용하여 SQL을 컴파일하고 실행하십시오. 정말

UPDATE foo SET bar=1 AND baz=2 

되는 괄호에있는 식의 결과가 첫 번째 열에에 넣어

UPDATE foo SET bar=(1 AND baz=2) 

과 : 또한

구문 오류가 발생하지 않는 SQL 구문에 문제가 두 번째 열은 수정되지 않습니다.

,로 구분, 하나 이상의 열을 업데이트하려면 :

Tried this but same result no update

db.execSQL("UPDATE Activities SET Details = '" + detail_edit.getText().toString() + "', Time = '" + Ctime + "' WHERE ID = '" + ID + "'", null); 

UPDATE foo SET bar=1,baz=2 
는 또한 WHERE 조건이 실제로 일치하는지 확인합니다. ID을 문자열 리터럴로 사용하고 있는데, ' 따옴표가 없으면 정수 대신 일치 시키길 원합니다.

거기에있는 동안 코드에는 사용자 입력의 문자열을 SQL에 직접 넣는 SQL 주입 취약점이 있습니다. 당신이 bindArgs에 PARAMS의 문자를 사용하고 통과 할 위치 SQL에 ?를 사용

db.execSQL("UPDATE Activities SET Details = ?, Time = ? WHERE ID = " + ID, 
    new String[] { 
     detail_edit.getText().toString(), 
     Ctime 
    }); 
+0

내가 코드를 업데이트 한 ... 질문 –

+0

에서 두 번째 부분을 해결해 주셔서 감사합니다. –

0

사용이 : 당신이 제안하지만 같은 결과대로

public void updateBattingFieldingData(int gameId, int batterTeamId, 
     int fielderTeamId) { 
    String string = " SELECT * FROM " + GAME_LIST_TABLE + " WHERE " 
      + KEY_GAME_ID + " = " + gameId; 
    ContentValues values = new ContentValues(); 
    values.put(KEY_BATTING_TEAM, batterTeamId); 
    values.put(KEY_FIELDING_TEAM, fielderTeamId); 
    db.update(GAME_LIST_TABLE, values, KEY_GAME_ID + " = " + gameId, null); 

} 
관련 문제