Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中动态设置PreparedStatement?_Java_Mysql_Prepared Statement - Fatal编程技术网

如何在java中动态设置PreparedStatement?

如何在java中动态设置PreparedStatement?,java,mysql,prepared-statement,Java,Mysql,Prepared Statement,我试图构建一个preparedStatement,示例如下: StringBuffer sqlStatement = new StringBuffer("Select * From APPLES where price =?"); if (request.getPackagedDate() != null) { sqlStatement.append(" AND packaged_dt_tm >= ?"); } if(request

我试图构建一个preparedStatement,示例如下:

StringBuffer sqlStatement = new StringBuffer("Select * From APPLES where price =?");
 if (request.getPackagedDate() != null) {
                sqlStatement.append(" AND packaged_dt_tm >= ?");
           }
 if(request.getExpiredDate() != null) {
                sqlStatement.append(" AND expired_dt_tm <= ?");
           }
 if (request.getAppleType() != null) {
                sqlStatement.append(" AND TYPE LIKE ?");
           }}
 PreparedStatement retrieveAppleStatement = connection.getPreparedStatement(sqlStatement.toString());

我必须列出所有的组合(不是所有的空,因为我不需要设置任何东西),这感觉有点跛脚。。。有没有更好的办法?我们可以在创建准备好的语句时动态设置值吗?

我觉得您的解决方案很好,但是如果您使用了很多参数,那么我建议使用类。语法将保持不变,只是使用参数名而不是参数号

Connection con=getConnection();
String query="select * from User where first_name=:firstname or last_name=:lastname";
NamedParameterStatement p=new NamedParameterStatement(con, query);
p.setString("firstname", "John");
p.setString("lastname", "Doe");
ResultSet rs=p.executeQuery();

使用设计的生成器模式创建一个
StatementBuilder
类来创建语句可能会很有用。这样,您可以将逻辑(即创建和填充语句)与获取结果并返回结果的类分开。
Connection con=getConnection();
String query="select * from User where first_name=:firstname or last_name=:lastname";
NamedParameterStatement p=new NamedParameterStatement(con, query);
p.setString("firstname", "John");
p.setString("lastname", "Doe");
ResultSet rs=p.executeQuery();