好吧,在阅读了整个答案中的所有信息以及评论中指向的其他帖子等之后,我决定总结一下我学到的东西:
设置:
从我所看到的,有三层
JDBC wrapper calls (e.g. Spring's SimpleJdbcTemplate)
|
|
Raw JDBC calls (e.g. PreparedStatement)
|
|
JDBC driver (e.g. Oracle)
第一个原因
许多JDBC类包装器,例如Spring的著名包装器,允许您在执行SQL语句时将其作为参数映射。这非常简单,因为它在后台使用原始JDBC时,会将所有从对象转换为正确类型的转换。第一个问题在这里:如果您有以下情况,会发生什么情况:SimpleJdbcTemplate
Map<String, Object>
java.sql.*
Map<String, Object> paramMap = new HashMap<String,Object>();
paramMap.put("p_some_data", new java.util.Date());
春天把它转换成什么?一个?一个?一个?或者它甚至把它扔到一个?正如@BalusC在回答另一个问题和这里的另一个人所解释的那样,这三种类型之间存在很大差异。因此,这是不使用的第一个原因:您不能依靠框架的内部约定来为您处理转换。java.sql.Date
java.sql.Timestamp
java.sql.Time
java.lang.Object
java.sql
java.util.Date
第二个原因
现在,谈到原始的JDBC调用,@The Nail解释说,你需要这些类型来进行JDBC调用,他是绝对正确的,这对我来说是新闻。但是,仍然有可怕的电话。通过阅读该调用的JavaDoc,对于如果给出.因此,不使用它的第二个原因是因为那里的模糊性。java.sql
setObject
java.util.Date
第三个原因
最后,谈谈司机的水平。我可以用个人经验证明,有时Spring与Oracle驱动程序结合使用确实可以与java.util.Date一起使用
。有时。有时它不会。因此,由于我不知道任何特定驱动程序的任何特定版本将如何处理,因此最好是显式的。这是第三个原因。java.util.Date
结论
一般来说,看起来原因是:“JDBC不应该与.如果你这样做,你无法确定会发生什么。这对我来说是一个足够好的理由:)java.util.Date