2014-04-24 76 views
-2

我想更新列表中的某个项目。它工作正常,我也想对数据库行这样做。没有错误,但查询不起作用,因为重新启动应用程序之后存在旧数据。哪里不对? Ofcourse我有更多的列比我想改变数据库不想更新

这是我如何调用查询:

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来标识项目。

另外:

  • 你应该通过一个where子句的所有字符串参数的whereArgs数组作为最后一个参数,而不是在null,这样的字符串将被正确地转义,以避免SQL注入问题。在where子句字符串中,用一个问号替换参数:'?'。
  • 您不应该在UI线程上更新数据库,因为这是一项昂贵的操作,而是在AsyncTask中执行。
+0

谢谢你的回答。是的,因为我现在看到我犯了愚蠢的错误。再次感谢你。 – Darek