我想知道如何从一个表中选择两个“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”中传递另一个字符串?
可以这样做吗?
感谢您的帮助。
答案 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) )