Java Prepared语句不返回具有like查询的结果

Java Prepared语句不返回具有like查询的结果,java,jdbc,db2,prepared-statement,sql-like,Java,Jdbc,Db2,Prepared Statement,Sql Like,我正在尝试使用PreparedStatement进行搜索,但查询未返回任何结果: final Session session = em.unwrap(Session.class); final String sql = "SELECT u.name FROM Users AS u WHERE u.name LIKE ?"; session.doWork(new Work() { @Override public void execute(

我正在尝试使用PreparedStatement进行搜索,但查询未返回任何结果:

 final Session session = em.unwrap(Session.class);

 final String sql = "SELECT u.name FROM Users AS u WHERE u.name LIKE ?";

 session.doWork(new Work() {
            @Override
            public void execute(Connection connection) throws SQLException {
                try (PreparedStatement stmt = connection.prepareStatement(sql))    
 {
      stmt.setString(1, "%" + nameTerm + "%");
      stmt.executeQuery();
            } 
 }
 });
数据库中有记录,它应该返回一个结果。我在iSeries Navigator中测试了我的查询,它可以正常工作。但如果我通过PreparedStatement执行它,它不会返回任何结果。我正在使用DB2数据库

编辑

我忘了提到,只有在搜索词包含撇号时才会出现此问题。

pstmt.executeUpdate()执行准备好的语句,但我在您的代码中找不到它。
您必须调用
executeUpdate()
api来执行准备好的语句

试一试


您只设置了
PreparedStatement
,实际上并没有调用调用数据库的
executeUpdate()
方法。检查一下这个

你没有在上面的代码中执行任何东西,你只是在设置一个参数值。不要使用
executeUpdate()
进行查询,不管别人怎么建议——使用
execute()
executeQuery()
 try (PreparedStatement stmt = connection.prepareStatement(sql)){
      stmt.setString(1, "%" + nameTerm + "%");
      stmt.executeUpdate();
  }