在Java中处理自定义输入
我想写一个有四个输入参数的方法,所有的输入参数都不是必需的。我需要检查输入参数是否为null,并查询数据库以返回结果。在不检查所有可能的组合的情况下,是否有任何方法可以做到这一点。。。它就像一个搜索引擎。。如果你给出了所有的输入参数,它将给出准确的结果,或者最接近的结果。 例如 输入城市、客户、姓名、邮政编码 如果zip不等于null,并且所有其他字段都为null,则查询数据库并返回与zip对应的值。它将是基于zip的整个区域的客户列表。如果所有字段都存在,它将给出准确的结果。我知道我可以检查每个值,并在条件循环中为所有可能的组合编写查询以获得结果。但我认为这是一个肮脏的解决办法在Java中处理自定义输入,java,mysql,Java,Mysql,我想写一个有四个输入参数的方法,所有的输入参数都不是必需的。我需要检查输入参数是否为null,并查询数据库以返回结果。在不检查所有可能的组合的情况下,是否有任何方法可以做到这一点。。。它就像一个搜索引擎。。如果你给出了所有的输入参数,它将给出准确的结果,或者最接近的结果。 例如 输入城市、客户、姓名、邮政编码 如果zip不等于null,并且所有其他字段都为null,则查询数据库并返回与zip对应的值。它将是基于zip的整个区域的客户列表。如果所有字段都存在,它将给出准确的结果。我知道我可以检查每
谢谢..不要检查所有可能的组合,而是动态组合查询:
StringBuilder q = new StringBuilder("select foo.* from Foo foo where 1 = 1");
List<String> parameters = new ArrayList<String>();
if (x != null) {
q.append(" and foo.x = ?");
parameters.add(x);
}
if (y != null) {
q.append(" and foo.y = ?");
parameters.add(y);
}
// ...
PreparedStatement stmt = connection.prepareStatement(q.toString());
int i = 1;
for (String arg : arguments) {
stmt.setString(i, arg);
i++;
}
您不能在根据参数值生成请求文本的系统上工作: 我已经有一段时间没有使用MySql了,所以它可能不正确
String s = "SELECT * FROM point "+(x != null || y!= null)?
"WHERE "+
(x!= null)?+"x="+x:""
(y!= null)?+"y="+y:""
:
"";
您可以使用不需要参数的签名来重载方法,而不是使用可选参数 例如:
String input(x,y,z){
String s = "SELECT * FROM point ......";
return s;
}
String input(x,y,z,a){
...
str = input(x,y,z,a) + "Where condition...";
.....
return s;
}
理解这个概念吗?你应该检查一下操作员
public void input(String... params) {
String queryBegin = "insert into testtable(testvalue) values('";
String queryEnd = "');";
for(String param : params) {
String fullQuery = queryBegin + param + queryEnd;
//execute your query
}
}
您必须实现逻辑以避免sql注入这里有一个稍微不同的建议:
if (city == null) city="*";
if (customer == null) customer="*";
if (name== null) name="*";
if (zip== null) zip="*";
String s = "SELECT * FROM point WHERE city="+city+" customer =" +customer
+"name="+name+"zip="+zip;
请提供进一步的细节,你的问题是什么?有代码吗?你们是如何查询数据库的?你的建议不是一个肮脏的黑客,它可能是实现你想要的最简单的方法。+是否有任何强制参数或所有参数都是可选的?它就像一个搜索引擎。。如果你给所有的输入参数,它会给你精确的结果,或者最接近的结果给我们一些代码来处理…重载并不能解决我的问题,因为我所有的数据类型都是字符串值,我无法检查参数的名称…哦,是的。。懂那么你没有比一对一地分析tem更好的选择了。我建议你采用与其他人略有不同的实现方式。。不我做另一个职位。。。这更容易