如何在一个查询中解决所有问题?

时间:2010-12-11 07:06:12

标签: android

在我的搜索模块中,我使用的是SQLite数据库。有时候我会搜索两个以上的值。所以我使用AND条件,有时只搜索一个值。我需要在单个查询中实现这两种情况。请帮帮我。

这是查询:

Cursor dbcur = myDB.rawQuery("select * from "+dbtable+" where Status='"+item+"'AND ball_court='"+ball+"'AND Tovendor='"+vendor+"'", null);

有时我会搜索statusball_courttovendor,有时我只会搜索status。如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

分阶段构建查询字符串,而不是一次构建。如果您总是要针对状态进行选择,请将其放在基本的WHERE子句中,然后添加任何其他表达式。使用参数(您可以使用SQLiteDatabase.query)而不是将值连接到查询本身以防止SQL注入。 dbtable最好不要来自不受信任的来源(例如用户,数据库本身)。我的Java有点生疏,但尝试以下内容开始:

List<String> argList = new LinkedList<String>();

String selection = "Status=?";
argList.add(item);
if (ball != null && ball.length()) {
    selection += " AND ball_court=?";
    argList.add(ball);
}
if (vendor != null && vendor.length()) {
    selection += " AND Tovendor=?";
    argList.add(vendor);
}

String[] argArray = new String[argList.length()];
argList.toArray(argArray);
// columns is a String[] of column names
Cursor dbcur = myDB.query(false, dbtable, columns, selection, argArray, null, null, null);

您可能希望使用StringBuilder

,而不是附加字符串

至于SELECT *,请阅读“What is the reason not to use SELECT *?

答案 1 :(得分:-1)

如果您发布示例查询以及可能搜索的内容,您可能会得到一些答案!我并不完全理解你的问题,因为我会/应该能够提供帮助。