2012-05-25 61 views
0

我有一个100或更多的列,可能有值“是”或“否”的表。如何在Android中使用Sqlite中的复杂Where语句执行此查询?

我想要做的与用户的请求,根据一个选择(复选框值的形式)提取所有以“是”有值的行。因此,一个例子是:

- 用户选择checkbox1 checkbox4和checkbox7和所有其他未选择。

查询可能是:

从表

选择名称,其中(COL1 = yes或COL4 = yes或COL7 = YES)AND(COL2 =否和COL3 =没有和所有其他栏设置为无)

如何实现这在Android查询?顺便说一下,我发现这个实现不是很优雅,请有人建议我实现该目标的其他实现?

回答

0

这里的固定代码。它包含一些测试代码。

 int numColumns = 10; 
     boolean[] answers = new boolean[numColumns]; 
     String[] colNames = new String[numColumns]; 
     for(int i = 0; i < colNames.length; i++) { 
      answers[i] = Math.random() > 0.5; 
      colNames[i] = String.format("Col%d", i); 
     } 
     //-----------LOGIC STARTS HERE---------------- 
     // use a loop 
     StringBuilder yesColumns = new StringBuilder(); 
     StringBuilder noColumns = new StringBuilder(); 
     for(int i = 0; i < answers.length; i++) { 
      if(answers[i]) { 
       if(yesColumns.length() > 0) 
        yesColumns.append(" OR "); 

       yesColumns.append(colNames[i]).append("='yes'"); 
      } 
      else { 
       if(noColumns.length() > 0) 
        noColumns.append(" AND "); 
       noColumns.append(colNames[i]).append("='no'"); 
      } 
     } 

     String yesCondition = yesColumns.toString(); 
     String noCondition = noColumns.toString(); 
     String query = String.format("select name from table where (%s) AND (%s)", 
            yesCondition, 
            noCondition); 
     System.out.println(query); 
     // SQLiteDatabase db; 
     // Cursor cursor = db.rawQuery(query, null); 
+0

首先感谢您的赞赏请求。问题在于select应该分为两部分:用户切换复选框(是),那个值将会以“或”关键字进入查询的第一部分,并且未选中(否)将进入和部分:从表中选择名称其中(col1 = yes或col4 = yes或col7 = yes)AND(col2 = no和col3 = no,其他所有列设置为no) – Nadir

+0

噢,对不起,完全错过了'或'的条件,让我解决这个问题。 – st0le

+0

我修好了,知道是否有问题。 :P – st0le

相关问题