Prepared语句不返回like-query的结果

时间:2015-01-09 15:43:01

标签: 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(Connection connection) throws SQLException {
                try (PreparedStatement stmt = connection.prepareStatement(sql))    
 {
      stmt.setString(1, "%" + nameTerm + "%");
      stmt.executeQuery();
            } 
 }
 });

DB中有记录,应该返回结果。我在iSeries Navigator中测试我的查询,它的工作原理。但是如果我通过PreparedStatement执行它,它就不会返回任何结果。我正在使用DB2数据库。

修改

我忘了提到仅当搜索字词包含撇号时才会出现此问题。

2 个答案:

答案 0 :(得分:0)

pstmt.executeUpdate()执行预备语句但我在您的代码中找不到它 你必须致电executeUpdate() api来执行准备好的陈述。

尝试

 try (PreparedStatement stmt = connection.prepareStatement(sql)){
      stmt.setString(1, "%" + nameTerm + "%");
      stmt.executeUpdate();
  } 

答案 1 :(得分:0)

您只是设置PreparedStatement,实际上并没有调用executeUpdate()方法,而是调用数据库。看看这个PreparedStatement Tutorial