【问题标题】:Executing multiple queries with single PS使用单个 PS 执行多个查询
【发布时间】:2017-01-11 10:50:08
【问题描述】:

我已经创建了准备好的语句对象。 现在我想得到多个查询的结果。是否可以使用单个准备好的语句对象/找到下面的代码

PreparedStatement ps = null;    

String moviedirectorQry = "SELECT movie_director FROM movies WHERE movie_title= ?";
ps = dbConnection.prepareStatement(moviedirectorQry);

ps.setString(1, "Twilight");

ResultSet rs=null;

rs = ps.executeQuery(moviedirectorQry);

while (rs.next()) {
    String director_name = rs.getString("movie_director");
    System.out.println("director name : " + director_name);
}

现在我想运行另一个查询.. 怎么办

【问题讨论】:

  • 在您的示例中,您只使用一个查询?您是否尝试使用多个?
  • 我提到了一个查询,但我想使用多个查询

标签: java mysql jdbc prepared-statement


【解决方案1】:

如果想法是对相同类型的不同查询使用相同的PreparedStatement,仅参数值发生变化,是的,可以,只需先调用clearParameters() 清除参数,以防你想重用在设置新参数的值之前。

代码可能是这样的:

if (ps == null) {
    // The PreparedStatement has not yet been initialized so we create it
    String moviedirectorQry = "SELECT movie_director FROM movies WHERE movie_title= ?";
    ps = dbConnection.prepareStatement(moviedirectorQry);
} else {
    // The PreparedStatement has already been initialized so we clear the parameters' value
    ps.clearParameters();
}
ps.setString(1, someValue);
ResultSet  rs = ps.executeQuery(); 

注意:您应该使用executeQuery() 而不是ps.executeQuery(moviedirectorQry),否则提供的参数值将被忽略,从而导致查询失败。

【讨论】:

  • 所以你的意思是说每次我都必须对每个查询使用 if 条件?
  • 您需要知道是否重复使用PS,以便在重复使用时清除参数。
  • PreparedStatement(或CallableStatement)上使用executeQuery(String) 必须从JDBC 4开始抛出SQLException,在此之前它是一个隐含的假设,即实现会不允许它。此外,从技术上讲,在重用之前没有必要调用clearParameters(),但如果您不设置所有参数,那么您可能会重用先前执行的值。
猜你喜欢
  • 2018-10-11
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 2021-10-30
  • 1970-01-01
相关资源
最近更新 更多