无法在 JDBC 中插入日期

Posted

技术标签:

【中文标题】无法在 JDBC 中插入日期【英文标题】:Not able to insert date in JDBC 【发布时间】:2017-11-26 23:43:39 【问题描述】:

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

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 是日期类型 【参考方案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 代码的其余部分在我看来没问题。

【讨论】:

以上是关于无法在 JDBC 中插入日期的主要内容,如果未能解决你的问题,请参考以下文章

JDBC4 插入日期“0001-01-01”

JDBC:将日期值插入 MySQL

如何在 Java 中将日期插入 MySQL 数据库表?

求助!!如何在java代码中,将日期插入mysql数据库(对应字段类型是datetime),用JDBC连接数据库。

如何获取 JDBC 日期格式?

Java JDBC:日期持续两天