Oracle 10g JDBC插入/更新日期类型列错误

时间:2016-01-11 11:39:06

标签: java oracle jdbc oracle10g

以下是我尝试过的环境 Oracle DB版本:10.2.0.3.0
JDBC JAR版本:10g版本(10.2.0.5),(10.2.0.4),(10.2.0.3),(10.2.0.2),(10.2.0.1.0)驱动程序
Java版本:SE 1.4,SE 1.5,SE 6

当我使用JDBC测试一个简单的SQL插入到Oracle Date类型列时,发现了一个奇怪的错误。每当我使用PreparedStatement并将java.sql.Timestamp设置为从1970年到1981年的23:30:00到23:59:59之间的时间(任何月份和日期都可以),{{1插入数据库的值将被破坏。但是,如果我运行直接插入SQL,它就可以工作。

方案A不起作用。

Date

情景B有效。

Calendar c = Calendar.getInstance();
String sql = "INSERT INTO LABOR (LABORNAME, STARTTIME) VALUES (?, ?)";
c.set(1970, 1, 1, 23, 45);
pstmt = con.prepareStatement(sql);
pstmt.setString(1, "test");
pstmt.setTimestamp(2, new java.sql.Timestamp(c.getTimeInMillis())); 
// Tried using new java.sql.Timestamp(utilDate.getTime()), result is the same
pstmt.execute();

已编辑**场景C,适用于JDBC 10g jar。感谢Mick Mnemonic的评论。

enter image description here

String sql = "INSERT INTO LABOR (LABORNAME, STARTTIME) VALUES ('TEST', TO_DATE('1970-01-01 23:55:00', 'YYYY-MM-DD HH24:MI:SS'))";
con = getConnection();
pstmt = con.prepareStatement(sql);
pstmt.execute();

对于场景A,如果我使用的是Oracle JDBC jar版本11g,则无法重现相同的错误。我的问题是实际导致问题的原因。

PS:我通过网络搜索,找不到任何相关内容。

0 个答案:

没有答案