数据库更新崩溃应用程序

时间:2012-09-26 17:10:03

标签: android database

代码:

    final String nome = nm.getText().toString();
            final String telefone = tlf.getText().toString();
            if(nome.length() != 0 && telefone.length() != 0){
                if(mIndex.equals("")) {                 
                    ContentValues valor = new ContentValues();
                    valor.put("nome", nome);
                    valor.put("telefone", telefone);
                    db.insert("contatos", null, valor);
                    ShowMessage("Sucesso","O Contato " + nome + " foi salvo com sucesso");
                }
                else {
                    String[] whereArgs = {"nome", "telefone"};

                    ContentValues dataToInsert = new ContentValues();                          
                    dataToInsert.put("nome", nome);
                    dataToInsert.put("telefone", telefone);

                    db.update("contatos", dataToInsert, "nome='"+nomeant+"' and telefone='"+foneant+"' ", whereArgs);
                    ShowMessage("Sucesso","O Contato " + nome + " foi editado com sucesso");
                }
            }

因此,mIndex是上一次活动中的联系人的索引(我选择并点击了项目/联系人,然后将索引传递给新活动),因此,如果EditTexts已经是BLANK,它将添加一个新的联系人,如果EditTexts有一个值并被更改,它将改变Clicked Contacts值(名称/电话)。但是,当我点击按钮SAVE时,它会崩溃我的应用程序,但错误位于db.update行。

db.update("contatos", dataToInsert, "nome='"+nomeant+"' and telefone='"+foneant+"' ", whereArgs);因此我认为whereClause或whereArgs是错误的,但因为我在Android编程中没有高智商。

1 个答案:

答案 0 :(得分:1)

您不需要whereArgs,因为您在where子句中附加了参数。只需提供null代替whereArgs -

 db.update("contatos", dataToInsert, "nome='"+nomeant+"' and telefone='"+foneant+"'", null);

但使用参数总是更好。它可以防止sql注入,也可以处理转义的特殊字符。在你的情况下 -

db.update("contatos", dataToInsert, "nome=? and telefone=?", whereArgs);

另外,你的whereArgs是错误的。它应该是 -

String[] whereArgs = new String[] {nomeant, foneant};