究竟是什么地方?android sqlite中的whereval?

时间:2014-01-20 20:53:41

标签: android sqlite

有两段代码,我认为它们是相似的,但是一个给了我一个错误,一个没有,所以我有几个问题要问

究竟什么是“where”,“whereval”? 以下代码给出了错误

 String where = android.provider.MediaStore.Audio.Media.ALBUM
                  + "="+img.get(position).Album;//here is the difference 
Cursor cursor = managedQuery(
                  MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, columns,
                  where, null , orderBy);//whereval is null here 

以下代码不会给我任何错误

String where = android.provider.MediaStore.Audio.Media.ALBUM
                  + "=?";here is the difference 
 String whereVal[] =  {img.get(position).Album};here is the difference 

 Cursor cursor = managedQuery(
                  MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, columns,
                  where, whereVal , orderBy);//i have included whereVal

请解释一下这两段代码的区别??

另外我如何在sqlite中使用两个条件??

1 个答案:

答案 0 :(得分:0)

在SQL中,引用了字符串文字'like this'。如果在没有引号的SQL中插入字符串文字,则可能会出现SQL语法错误。它与Java中的相同,其中没有引号的"any string"不太可能是有效的Java代码,但它作为字符串文字有效。

?是文字的占位符。使用占位符编译SQL,并将文字值绑定到已编译的语句。可以将其视为编程语言中的变量。变量的值来自绑定参数。在Android Java sqlite包装器中,绑定参数在字符串数组中提供。

进一步阅读:http://www.sqlite.org/lang_expr.html#varparam - 尽管Android包装器代码在sqlite C API之上添加了一些漏洞抽象。

  

假设我必须使用code1来实现我从代码2获得的结果。应该是什么语法?

使用'...'引用字符串文字:

String where = android.provider.MediaStore.Audio.Media.ALBUM
              + "='"+img.get(position).Album+"'";

基于评论,您需要一个联合表达式。只需在子表达式之间添加AND,例如

String where = "foo='bar' AND baz='xyzzy'";