在Java中处理自定义输入

在Java中处理自定义输入,java,mysql,Java,Mysql,我想写一个有四个输入参数的方法,所有的输入参数都不是必需的。我需要检查输入参数是否为null,并查询数据库以返回结果。在不检查所有可能的组合的情况下,是否有任何方法可以做到这一点。。。它就像一个搜索引擎。。如果你给出了所有的输入参数,它将给出准确的结果,或者最接近的结果。 例如 输入城市、客户、姓名、邮政编码 如果zip不等于null,并且所有其他字段都为null,则查询数据库并返回与zip对应的值。它将是基于zip的整个区域的客户列表。如果所有字段都存在,它将给出准确的结果。我知道我可以检查每

我想写一个有四个输入参数的方法,所有的输入参数都不是必需的。我需要检查输入参数是否为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更好的选择了。我建议你采用与其他人略有不同的实现方式。。不我做另一个职位。。。这更容易