Spring JdbcTemplate如何识别数据类型?

时间:2016-11-04 04:29:29

标签: java sql spring jdbctemplate

将spring JdbcTemplate与预处理语句一起使用时,我们可以单独设置参数值,也可以只传递一个对象数组。

jdbctemplate.update(sql, arg1, arg2);

jdbctemplate.update(sql, new Object[]{arg1, arg2});

这两种方法都有效。但我想知道当作为Object数组传递时,jdbctemplate如何知道将数据转换为与数据库列的类型匹配。

两种方法的性能差异是什么?

如何记录在数据库上执行的最终查询。为org.springframework.jdbc包启用DEBUG日志并不适用于我。

1 个答案:

答案 0 :(得分:3)

JdbcTemplate.update的两次调用没有区别,实际上你的两个调用都采用相同的方法。 JdbcTemplate

中只有一个update方法

具有以下签名

public int update(String sql, Object... args) throws DataAccessException 

正如您所看到的,最后一个参数是Java变量参数(...)而不是数组。因此,您可以将单个值或Object数组赋予相同的Variable Argument。

关于JdbcTemplate知道如何将数据转换为与目标数据类型匹配的问题,它只是根据提交的变量顺序创建PreparedStatement并调用PreparedStatement.set***方法参数和值实际上只检查给定值是StringDate还是Calendar并调用PreparedStatement.setStringPreparedStatement.setTimestamp。对于其他所有内容PreparedStatement.setObject