0

java.util.Date用来获取日期,我得到这样的日期格式

2013 年 6 月 29 日星期六 11:07:25 CDT

当我尝试使用将其插入数据库时

String QueryString = "INSERT INTO db (day) Values ('"+d+"');";
    st.executeUpdate(QueryString);

我明白了

“从字符串转换日期和/或时间时转换失败。”

如何将这种类型的日期插入数据库?

我应该将其声明为字符串吗?

4

4 回答 4

4

我怎样才能将这种类型的日期插入数据库?我应该将其声明为字符串吗?

不 - 您甚至应该避免当前拥有的字符串转换。你不应该像那样动态地构建你的 SQL - 这是 SQL 注入攻击、难以阅读的代码和转换失败的秘诀。

相反,使用 aPreparedStatement并使用 设置参数setDate

// TODO: Closing the statement cleanly in a finally block or try-with-resources
PreparedStatement pst = conn.prepareStatement("INSERT INTO db (day) Values (?)");
pst.setDate(1, new java.sql.Date(d.getTime()));
pst.executeUpdate();

请注意,它java.sql.Date是 的子类java.util.Date,但它们有些不同。我从来不清楚使用哪个时区将给定的时间转换为真实的日期——而且文档也没什么帮助。在我看来,它是被设计破坏的,但那是另一回事。您可以使用另一个setDate接受Calendar- 用于时区的重载。这仍然非常不清楚,但希望你能得到你想要的结果。

于 2013-06-29T17:15:30.717 回答
1

使用 java.sql.Date与数据库兼容

于 2013-06-29T17:15:06.837 回答
0

或者,使用可更新的 ResultSet

ResultSet rs = conn.createStatement("select day from db", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs.moveToInsertRow();
rs.updateDate(1, yourJavaSqlDateObject);
rs.insertRow();
rs.first();

但是,根据您的驱动程序/数据库,表上可能存在写锁。

日期格式应该在输出上完成,而不是在输入上。让数据库决定如何最好地存储日期。

于 2013-06-29T17:22:54.657 回答
0

您可以使用SimpleDateFormat来格式化您的 Date 对象

Date d = Calendar.getInstance().getTime(); //Your date

String dateString = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d);

String QueryString = "INSERT INTO db (day) Values ('"+dateString+"');";
st.executeUpdate(QueryString);
于 2013-06-30T01:31:28.857 回答