我将Java 8与Spring’s JdbcTemplate和Oracle 12.1结合使用,
JdbcTemplate
我想更新记录并获取更新的确切时间记录
jdbcTemplate.update(UPDATE_SQL, null);
当前它返回(int)受影响的行数,但是我想要确切的更新日期
我是否必须发送新请求以获取可能不正确的当前时间?
更确切的是将更新日期保存在列中,然后执行另一个SQL
是否有另一个选项可在一个查询中获取更新日期?
显然,我也不想使用从代码获取日期(如new Date()),因为服务器时间与数据库时间不同
new Date()
与 纯JDBC 相比,您决定使用JDBCTemplate最有可能简化代码。
IMHO的这个特殊问题使其他答案中提出的 普通JDBC 解决方案更加简单,因此,我绝对建议从JDBCTemplate获取数据库连接并以JDBC方式进行插入。
我想到的使用JDBCTemplate的最简单解决方案是将插入内容包装在中,PROCEDURE然后将时间戳作为OUT参数返回。
PROCEDURE
OUT
简单示例(根据需要调整时间logik)
create procedure insert_with_return_time (p_str VARCHAR2, p_time OUT DATE) as BEGIN insert into identity_pk(pad) values(p_str); p_time := sysdate; END; /
通话使用 SimpleJdbcCall
SimpleJdbcCall
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName("insert_with_return_time"); SqlParameterSource params = new MapSqlParameterSource().addValue("p_str", str); Map<String, Object> out = jdbcCall.execute(params);
该Map包含返回的值,例如,[P_TIME:2019-10-19 11:58:10.0]
Map
[P_TIME:2019-10-19 11:58:10.0]
但我只能重复一遍,在这个特殊的用例中,IMHO JDBC是从JDBCTemplate中抢救过来的 ;)