Android-如果存在,则按缓存名称对调用进行排序(在sqlite中使用ifnull)
我想按缓存的名称对调用日志进行排序。缓存的名称可以为空。 因此,如果缓存的名称为空,我希望获得别名的电话号码 在sqlite中,有一个ifnull()函数。 我尝试:Android-如果存在,则按缓存名称对调用进行排序(在sqlite中使用ifnull),android,sqlite,android-contentprovider,calllog,ifnull,Android,Sqlite,Android Contentprovider,Calllog,Ifnull,我想按缓存的名称对调用日志进行排序。缓存的名称可以为空。 因此,如果缓存的名称为空,我希望获得别名的电话号码 在sqlite中,有一个ifnull()函数。 我尝试: String[] projections = new String[] { Calls._ID, Calls.NUMBER, Calls.DATE, Calls.TYPE, Calls.DURATION, "ifnull("+Calls.CACHED_NAME+","+Calls.NUMBER+") as display_nam
String[] projections = new String[] { Calls._ID, Calls.NUMBER, Calls.DATE, Calls.TYPE, Calls.DURATION, "ifnull("+Calls.CACHED_NAME+","+Calls.NUMBER+") as display_name" };
Cursor cursor_call = ctx.getContentResolver().query(URI_CALL_LOGS,
projections,
null,
null,
null);
但是我在使用ifnull时出现了一个错误,我没有找到这个函数的示例
java.lang.IllegalArgumentException:无效列ifnull(名称、编号)显示为\u name由于创建查询的方式,括号之类的内容会自动转义以防止SQL注入攻击 在您可以直接访问原始数据库(而不是通过contentProvider)的情况下,您可以使用,例如: myDB.rawquery(“从a,b中选择*其中a.id=b.someid”,null)
但在本例中,您似乎希望访问联系人应用程序的call_log数据库,这只能通过提供的ContentResolver实现。由于它有意设计为只允许您发送值,而不允许将SQL命令作为变量发送,因此ifnull(…)不起作用,当您从光标中提取数据时,您需要使用逻辑在名称和数字之间进行选择。编辑问题以包含来自Logcat的错误消息?