【问题标题】:Not able to insert date in JDBC无法在 JDBC 中插入日期
【发布时间】:2026-02-15 13:15:01
【问题描述】:

我正在使用的数据库的日期格式为

DD-MON-RR

这是桌子:

CREATE TABLE dependent (
     Fname     varchar2(15) not null,
     bdate     date,
);

我目前正在尝试使用带有代码的 JDBC 插入数据库

String insert = "INSERT INTO DEPENDENT(Fname,bdate) VALUES(?,?)";
PreparedStatement p = z.conn.prepareStatement(insert);
p.setString(1, "Billy");
String formatIn = "DD-MMM-YY";
SimpleDateFormat sdfi = new SimpleDateFormat(formatIn);
java.util.Date inDate = sdfi.parse("29-AUG-10");
java.sql.Date sqlDate = new java.sql.Date(inDate.getTime());
p.setDate(2, sqldate);
p.executeUpdate();

我认为这符合预期的格式,但是它一直给我 java.sql.SQLException: Io exception: Size Data Unit (SDU) mismatch

我不确定如何解决这个问题

【问题讨论】:

  • 你表中的bdate列是什么类型的?
  • bdate 是日期类型

标签: sql oracle jdbc prepared-statement


【解决方案1】:

信不信由你,看起来您的错误与您在SimpleDateFormat 中使用的模式有关。更改以下内容:

String formatIn = "DD-MMM-YY";
SimpleDateFormat sdfi = new SimpleDateFormat(formatIn);
java.util.Date inDate = sdfi.parse("29-AUG-10");

到此,问题应该消失了:

String formatIn = "dd-MMM-yy";
SimpleDateFormat sdfi = new SimpleDateFormat(formatIn);
java.util.Date inDate = sdfi.parse("29-AUG-10");

DY 说明符分别表示年份和星期几,可能不是您打算使用的(请参阅此处:Y returns 2012 while y returns 2011 in SimpleDateFormat)。

请注意,您的 JDBC 代码的其余部分在我看来没问题。

【讨论】: