在我的搜索模块中,我使用的是SQLite数据库。有时候我会搜索两个以上的值。所以我使用AND
条件,有时只搜索一个值。我需要在单个查询中实现这两种情况。请帮帮我。
这是查询:
Cursor dbcur = myDB.rawQuery("select * from "+dbtable+" where Status='"+item+"'AND ball_court='"+ball+"'AND Tovendor='"+vendor+"'", null);
有时我会搜索status
和ball_court
,tovendor
,有时我只会搜索status
。如何解决这个问题?
答案 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)
如果您发布示例查询以及可能搜索的内容,您可能会得到一些答案!我并不完全理解你的问题,因为我会/应该能够提供帮助。