在更新android中的联系人姓名时向包裹异常写入异常?

时间:2011-11-29 10:49:49

标签: android sqlite calllog

我需要在android.what中的sql lite数据库中更新表callog.calls的列(cached_name)我无法弄清楚如何使用update语句。我无法找到任何关于使用cursor的update命令。请提前帮助。谢谢。

 //number1 is the phone number against which I need to run update query in db.
 //name is the string which I used to insert against number1..              

      String name=edittext.gettext().tostring();           
        ContentResolver cr = getContentResolver(); 
        Cursor cur = cr.query(CallLog.Calls.CONTENT_URI,
                    null, null, null, null);
        ContentValues value=new ContentValues();

        value.put("CallLog.Calls.CACHED_NAME",name);

        cur.moveToFirst();  
        while(!cur.isLast())
        {                   
              String number=cur.getString(cur.getColumnIndex(CallLog.Calls.NUMBER));                    
              if((number.equals(number1)==true)
              {  
                    try{                   
                         cr.update(CallLog.Calls.CONTENT_URI,value,CallLog.Calls.CACHED_NAME+"=?",null);
                    }
                    catch(Exception e)
                    {
                         e.printStackTrace();
                         System.out.println(e.getStackTrace()); 
                    }
             }//if  
             cur.moveToNext();   
        }//while

1 个答案:

答案 0 :(得分:0)

基本上,您实际需要的唯一一行是更新:

String name = edittext.getText().toString();
ContentResolver cr = getContentResolver(); 

ContentValues value = new ContentValues();
// Note that there is no "" here. The value is a constant
value.put(CallLog.Calls.CACHED_NAME, name);

cr.update(CallLog.Calls.CONTENT_URI, values, CallLog.Calls.NUMBER+"=?",
    new String[] { number1 });

这相当于这个原始SQL查询:

UPDATE call_log SET cached_name = name WHERE number = number1;

无需迭代所有调用,这就是where子句的用途。

另外,

while(!cur.isLast())

阻止您实际读取最后一个匹配值。不要那样做。使用

while (cur.moveToNext())

当你需要迭代一个游标(你没有,这里)

我强烈建议你看一下游标是如何工作的,以及sql是如何工作的。

(另外,出于好奇,你为什么需要修改callLog表?)