2016-11-04 152 views
1

当使用弹簧JdbcTemplate和预处理语句时,我们可以单独设置参数的值,或者只传递一个对象数组。JdbcTemplate如何识别数据类型?

jdbctemplate.update(sql, arg1, arg2); 

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

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

这两种方法在性能上有差异吗?

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

回答

2

这两个电话与JdbcTemplate.update没有任何区别,实际上你的通话都采用相同的方法。只有一个updateJdbcTemplate

方法,其具有以下特征

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

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

为了您的JdbcTemplate如何知道投来匹配目标数据类型的数据的问题,它只是创建了一个PreparedStatement,并要求根据所提交的变量参数和价值,实际上只有检查的顺序是否与给定值PreparedStatement.set***方法分别是String,DateCalendar,并且要求PreparedStatement.setStringPreparedStatement.setTimestamp。对于其他所有只是PreparedStatement.setObject

+0

非常感谢您的详细解答。你能给我关于伐木的最后一个问题的解决方案吗? –