无法在android中的数据库中运行更新查询?

时间:2011-11-29 07:07:38

标签: java android sqlite

我正在尝试更新联系人表格的星号字段,或者换句话说,我正在尝试在我的应用程序中添加一个名称到收藏列表。我搜索了很多,但找不到任何特定于我的案例.update查询只是没有做任何改变,甚至没有抛出异常,也不是堆栈跟踪中的东西。

//appname used in the code is the name which I need to add to the starred list.. 
ContentResolver cr = getContentResolver();          

Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
            null, null, null, null);

ContentValues value=new ContentValues();
value.put("ContactsContract.Contacts.STARRED",1);

cur.moveToFirst();  
while(!cur.isLast()){

        String fetchname=cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

        if((appname.equalsIgnoreCase(fetchname))==true)
        {    
            String starredvalue=cur.getString(cur.getColumnIndex(ContactsContract.Contacts.STARRED));
            try
                {                  
                cr.update(ContactsContract.Contacts.CONTENT_URI,value,"starred=?",new String[]{starredvalue});
            }
            catch(Exception e)
            {
                e.printStackTrace();                    
            }
       }//if  
       cur.moveToNext();     
}//while

1 个答案:

答案 0 :(得分:1)

来自fine manual

  

public int update (String表,ContentValues值,String whereClause,String [] whereArgs)

     

whereClause 更新时要应用的可选WHERE子句。传递null将更新所有行。

您的 whereClause 如下所示:

"starred='true'"

请注意,在该SQL片段中没有任何占位符(即col = ?之类的内容)?但是您在 whereArgs 参数中为不存在的占位符提供参数:

new String[]{starredvalue}

所以update调用正在寻找占位符第一,而不是在 whereClause 中找到它,然后你得到一个“索引超出范围”的异常。

我确定您要尝试做什么,但也许您希望 whereClause "starred = ?"(而不是"starred='true'")或者{{1} } whereArgs