我有3个字段,用户可以选择输入值。他必须为系统输入至少一个值才能返回任何内容。
我需要根据用户输入值的哪一个框动态构建我的WHERE子句。
我很难设置参数值。
这是我到目前为止所做的:
StringBuilder queryStr = new StringBuilder();
Object param[];
int paramCount = 0;
Database db = (Database) ssb.getObject("db");
queryStr.append("SELECT * FROM tblData ");
queryStr.append("WHERE deleted != 1 ");
if(!field1.equals("")){
queryStr.append("AND field1 = ? ");
paramCount++;
}
if(!field2.equals("")){
queryStr.append("AND field2 = ? ");
paramCount++;
}
if(!field3.equals("")){
queryStr.append("AND field3 = ? ");
paramCount++;
}
param = new Object[paramCount];
for (int i=0; i <= paramCount; ++i)
param[i] = field1; <-- ????
db.queryPS(queryString.toString(), param);
答案 0 :(得分:1)
创建一个不为空的字段List
。
StringBuilder queryStr = new StringBuilder();
List<String> param = new ArrayList<>();
Database db = (Database) ssb.getObject("db");
queryStr.append("SELECT * FROM tblData ");
queryStr.append("WHERE deleted != 1 ");
String[] fields = { field1, field2, field3 };
for (int i = 0; i < fields.length; i++) {
if (!fields[i].isEmpty()) {
queryStr.append("AND field" + (i + 1) + " = ? ");
param.add(fields[i]);
}
}
db.queryPS(queryString.toString(), param.toArray());
答案 1 :(得分:0)
很棒的输入@ 4castle。谢谢你,我得到了解决:)
StringBuilder queryStr = new StringBuilder();
ArrayList<String> parameterValues = new ArrayList<String>();
Database db = (Database) ssb.getObject("db");
queryStr.append("SELECT * FROM tblData ");
queryStr.append("WHERE deleted != 1 ");
if(!field1.equals("")){
queryStr.append("AND field1 = ? ");
parameterValues.add(field1);
}
if(!field2.equals("")){
queryStr.append("AND field2 = ? ");
parameterValues.add(field2);
}
if(!field3.equals("")){
queryStr.append("AND field3 = ? ");
parameterValues.add(field3);
}
db.queryPS(queryString.toString(), parameterValues.toArray());