【问题标题】:Using Symbols with Prepared Statement parameters in JAVA在 JAVA 中使用带预处理语句参数的符号
【发布时间】:2017-06-13 20:18:52
【问题描述】:

如何在下面代码的参数中使用 %?如果我只是在没有 rset.setString() 的查询中直接使用它,它就可以工作。谢谢!

    try (Connection con = DriverManager.getConnection(connection);
         PreparedStatement prepstmt = con.prepareStatement("SELECT {fn SUBSTRING(VS_TABLE_KEY,3,18)} FROM VP_SD_TABLE WHERE {fn SUBSTRING(VS_DESCRIPT,3,62)} LIKE ?");
         ResultSet rset = prepstmt.executeQuery()

    ) {
        prepstmt.setString(1,"DI%");
        while (rset.next()) {
            System.out.println(rset.getString("VS_TABLE_KEY"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
        System.exit(1);
    }

【问题讨论】:

  • 您尝试该代码时发生了什么?
  • 不返回任何结果
  • 您需要为substring() 表达式提供一个别名。您的结果集没有列名VS_TABLE_KEY
  • 所以您认为别名使其无法正常工作?如果我使用它,它会按原样工作。 "选择 {fn SUBSTRING(VS_TABLE_KEY,3,18)} 从 VP_SD_TABLE WHERE {fn SUBSTRING(VS_DESCRIPT,3,62)} LIKE 'DI%'"
  • 不要将查询作为 try-with-resources 的一部分执行。创建结果集但不要在那里运行executeQuery()。 setString 那样没有效果。

标签: java jdbc prepared-statement


【解决方案1】:

您在设置参数之前执行查询。运行此代码时应该得到一个异常,而不仅仅是一个空的结果集。

【讨论】:

  • 谢谢!我一直在轮班工作 10 个小时,事情开始变得棘手。不敢相信我忽略了这一点。
猜你喜欢
  • 1970-01-01
  • 2014-01-07
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 2020-06-07
  • 2014-04-06
  • 2015-07-14
相关资源
最近更新 更多