2014-04-24 6 views
-2

목록의 일부 항목을 업데이트하고 싶습니다. 그것은 잘 작동하고 또한 데이터베이스 행이 작업을 수행하고 싶습니다. 오류가 없지만 응용 프로그램을 다시 시작한 후에 오래된 데이터가 있기 때문에 쿼리가 작동하지 않습니다. 뭐가 잘못 되었 니? 클래스에서데이터베이스가 업데이트되지 않습니다.

if(!done) 
    { 

list.get(longPressedPossition).setRating(tmpBundleIntent.getInt("nowaOcena")); 
list.get(longPressedPossition).setNameOfItem(tmpBundleIntent.getString("nowaNazwa")); 
dataBaseManager.updateTodo(list.get(longPressedPossition)); 
          adapter.notifyDataSetChanged(); 
          done = true; 

    } 

그리고 방법 :

public void updateTodo(GifModel model) { 
     String where = SqliteHelper.NAME + "=" +"'"+ model.getNameOfIteme()+ "'"; 

     ContentValues updateTodoValues = new ContentValues(); 
     updateTodoValues.put(SqliteHelper.NAME, model.getNameOfIteme()); 
     updateTodoValues.put(SqliteHelper.RATING, model.getRating()); 
     database.update(SqliteHelper.TABLE_NAME, updateTodoValues, where, null); 
    } 

답변

1

당신은 시도하고 당연히 나는

을 변경하려면보다 더 많은 열이 나는 쿼리를 호출하고있어 어떻게되어있어 (where 절에서) 아직 설정되지 않은 새 이름을 사용하여 항목을 찾아서 항목의 이름을 업데이트합니다. 따라서 where 절과 일치하는 항목이 없기 때문에 업데이트해도 아무런 효과가 없습니다. 대신 행 ID를 사용하여 항목을 식별하십시오. 또한

는 : 문자열은 SQL 주입 문제를 방지하기 위해 올바르게 이스케이프 될 수 있도록

  • 당신은 마지막 매개 변수 대신 nullwhereArgs 배열에 where 절의 모든 문자열 인수를 전달해야한다. where 절 문자열에서 인수를 물음표 '?'로 바꿉니다.
  • 값 비싼 작업이기 때문에 UI 스레드에서 데이터베이스를 업데이트하지 말고 대신 AsyncTask에서 데이터베이스를 업데이트해야합니다.
+0

답장을 보내 주셔서 감사합니다. 네, 지금 저는 바보 같은 실수를 저질렀습니다. 다시 감사합니다. – Darek

관련 문제