【发布时间】:2011-11-22 15:57:26
【问题描述】:
我浏览了页面,没有找到满意的答案。
是否有可能从 JDBC 获取默认数据格式?
我正在编写一个程序,用户可以在其中选择不同类型的数据库(如 Oracle、MSSQL 等)并向其中插入数据。我需要 JDBC 来告诉我默认的日期格式是什么。
有人遇到过这种情况吗?
提前感谢您的回答。
【问题讨论】:
我浏览了页面,没有找到满意的答案。
是否有可能从 JDBC 获取默认数据格式?
我正在编写一个程序,用户可以在其中选择不同类型的数据库(如 Oracle、MSSQL 等)并向其中插入数据。我需要 JDBC 来告诉我默认的日期格式是什么。
有人遇到过这种情况吗?
提前感谢您的回答。
【问题讨论】:
您不应该需要日期格式。您应该使用PreparedStatement 并调用setDate 或setTimestamp 来传递数据。无需将其转换为字符串格式,因为您不应在 SQL 中表示值(或 any 值)。
【讨论】:
您通常不应该关心日期格式。如果这样做,则意味着您将日期视为字符串,方法是将它们存储为 Java 端的 String 和 DB 端的 VARCHAR 。这是错误的。它们应该在 Java 端存储为 java.util.Date,在 DB 端存储为 DATETIME 或 TIMESTAMP 或 DATE(如果您不关心时间部分)。
存储日期(带时间)的正常方法是使用PreparedStatement#setTimestamp():
preparedStatement = connection.prepareStatement("INSERT INTO person (birthdate) VALUES (?)");
preparedStatement.setTimestamp(1, new Timestamp(date.getTime()));
// ...
取回它的正常方法是使用ResultSet#getTimestamp():
Date date = resultSet.getTimestamp("birthdate");
// ...
这不仅无需担心特定于 DB 的默认日期字符串格式,而且还允许在 SQL 端使用 >、<、BETWEEN 等对选择日期进行更细粒度的控制,以及在 Java 端使用 SimpleDateFormat 进行更细粒度的日期格式。
【讨论】: