sqlite使用AND和IN运算符

时间:2014-12-05 10:15:26

标签: android sqlite

我想知道如何从一个表中选择两个“where”参数并且都是数组字符串。 这是我的一个参数的代码:

String[] wheres = new String[globalRunnersList.size()];

    String questionMarks = "";

    for(int i = 0; i < globalRunnersList.size(); i++)
    {
        wheres[i] = globalRunnersList.get(i).getAthleteId();
        questionMarks += ",?";
    }
    questionMarks = questionMarks.substring(1);

    Cursor mCursor = db.query(true, "ActivityMeasurements", new String[] {"MeasurementAttemptId"},"Athlete IN ("+questionMarks+")", wheres, null, null, null, null);
    if(mCursor.moveToFirst())
    {
        do
        {
            measAttempts.add(mCursor.getString(mCursor.getColumnIndex("MeasurementAttemptId")));
        }
        while(mCursor.moveToNext());
    }
    return measAttempts;

我想改变这样的查询:

Cursor mCursor = db.query(true, "ActivityMeasurements", new String[] {"MeasurementAttemptId"},"Athlete IN ("+questionMarks+") AND ActivityDefinition IN("+anotherQuestionMarks+")", wheres, null, null, null, null);

“anotherQuestionMarks”将从另一个字符串计算,但我如何在“selectionArgs”中传递另一个字符串?

可以这样做吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

  

&#34; anotherQuestionMarks&#34;将从另一个字符串计算,但我如何在&#34; selectionArgs&#34;中传递另一个字符串?

selectionArgs(或代码中的wheres)只是一个数组,其中的值将用于绑定查询字符串中每个?占位符的值,从左到右。因此,只需将其他值添加到selectionArgs数组即可。请记住为两组值分配足够的空间。

答案 1 :(得分:0)

您可以使用@laalto建议的其他 selectionArgs ,如下所示。

Cursor mCursor = db.query(true, "ActivityMeasurements", new String[] {"MeasurementAttemptId"},"Athlete IN (?) AND ActivityDefinition IN(?)",new String[]{ wheres ,mActivityDefinitionArray}, null, null, null, null);

或另一种方法是使用 db.rawQuery 来创建使用sql syntex的查询作为任何其他数据库系统。

答案 2 :(得分:0)

我不确定我是否正确地阅读了这个问题,但是:

为什么不使用CriteriaQuery,比如

//cb = CriteriaBuilder
CriteriaQuery q = cb.createQuery(class);
 query.where(
  cb.and(
      cb.in(c.between("Athlete"), questionMarks),
      cb.in(c.between("ActivityDefinition"), anotherQuestionMarks)
  )
);

createCriteria(class)
    .add( Restrictions.in("Athlete", questionMarks) )
    .add( Restrictions.in("ActivityDefinition", anotherQuestionMarks) )