繁体   English   中英

SQL将日期插入数据库

[英]SQL insert date into database

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

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

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

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

我明白了

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

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

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

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

不,您甚至应该避免当前使用的字符串转换。 您不应该那样动态地构建SQL-这是SQL注入攻击,难以理解的代码和转换失败的诀窍。

而是使用PreparedStatement并使用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.Datejava.util.Date的子类,但它们有所不同。 对我而言,还不清楚哪个时区用于将给定的时间点转换为实际日期-并且文档没有什么帮助。 在我看来,它是故意破坏的,但这是另一回事。 您可以使用另一个setDate重载,该重载接受一个Calendar用于时区。 仍然还不清楚,但是希望您能得到想要的结果。

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

或者,使用可更新的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();

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

日期格式化应在输出而不是输入上进行。 让数据库决定如何最好地存储日期。

您可以使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM