我需要在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
答案 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表?)