当我们使用JPA和JPQL时,我们可以使用一些日期/时间表达式来使查询DMBS独立.例如,假设我想在数据库中设置会话的结束时间,我可以简单地使用CURRENT_TIMESTAMP
表达式,如下所示:
String jpql = "UPDATE SessionJpa s SET s.end = CURRENT_TIMESTAMP WHERE s.id = :id"; entityManager.getTransaction().begin(); Query query = entityManager.createQuery(jpql); query.setParameter("id", someIdValue); query.executeUpdate(); entityManager.getTransaction().commit();
这样,相同的JPQL应该与Oracle,MySQL,PostreSQL等一起用作DBMS.
现在我的问题是:在使用JDBC而不是JPA时,有没有办法实现相同的目标?
这是我到目前为止:
String sql = "UPDATE Sessions SET end = SYSDATE WHERE id = ?"; try (Connection connection = dataSource.getConnection(); PreparedStatement statement = connection.prepareStatement(sql)) { statement.setLong(1, someIdValue); int updatedRows = statement.executeUpdate(); } catch(SQLException ex) { Logger.getLogger(SessionsBean.class.getName()).log(Level.SEVERE, null, ex); }
但当然SYSDATE
不是通用表达式,它最有可能只作为DBMS使用Oracle.