【问题标题】:How to insert datetime field in mySql database using PreparedStatement in java? [duplicate]如何在 java 中使用 PreparedStatement 在 mySql 数据库中插入日期时间字段? [复制]
【发布时间】:2017-02-11 17:11:17
【问题描述】:

我在这里为类似的问题发红,但我没有t find solution for my problem, how to insert datetime field in mySql database using PreparedStatement in java? I didnt 找到与此问题和 PreparedStatement 相关的任何内容。

所以,我有这个代码:

public void sacuvajDezurstva(List<Dezurstvo> listaDezurstava) throws SQLException {
        String sqlSacuvajDezurstva = "INSERT INTO dezurstvo (Datum,IspitniRokID, NastavnikID, PredmetID) VALUES (?,?,?,?)";
        PreparedStatement ps = konekcija.prepareStatement(sqlSacuvajDezurstva);

        for (Dezurstvo dezurstvo : listaDezurstava) {
            ps.setDate(1, new Date(dezurstvo.getDatum().getTime()));
            ps.setLong(2, dezurstvo.getIspitniRok().getIspitniRokID());
            ps.setLong(3, dezurstvo.getNastavnik().getNastavnikId());
            ps.setLong(4, dezurstvo.getPredmet().getPredmetID());

            ps.executeUpdate();
        }


        konekcija.commit();
    }

此代码有效,但这里的第一个 ps 参数 Date 是有问题的,因为在数据库中只保存了此属性的一部分 - Date,当我使用此方法时,精确地保存了日、月和年。但是小时、分钟和秒只是 00:00:00。所以数据库中的整个日期如下所示:

2016-06-26 00:00:00

我插入日期的数据表中的此列是日期时间类型。当我进行调试时,我看到这个 - dezurstvo.getDatum().getTime()) 具有通过表单插入的正常日期值。所以它有日、月、年、时、分和秒,但是这个 ps.setDate,实际上是 ps,只有日、月和年的值。

我认为问题出在 SQL 查询中,但是当我只有 SQL 查询时我不知道该怎么做?在 VALUES 中,而不是某个实际日期。

感谢您的帮助!

【问题讨论】:

  • 你可以用java.sql.Timestamp代替Date

标签: java mysql sql


【解决方案1】:

要将Date 插入DATETIME 字段,其格式应类似于"yyyy-MM-dd HH:mm:ss"

另一种选择是改用TIMESTAMP 字段。

【讨论】:

  • TIMESTAMP 字段与 DATETIME 相比确实有限,并且不能表示 2038 年之后的值。现在这可能没什么大不了,但就像 Y2K 一样,没有理由为自己设定为失败做好准备。
  • 但是我的日期已经这样格式化了。当从表单中读取日期时,它就是这种格式。但是当我应该从数据库中的表格中读取这个日期时,就会出现问题。我想在这部分代码中 - ps.setDate 是错误的。由于错误的查询......所以你认为我应该这个 - new Date(dezurstvo.getDatum().getTime()) - 转换成字符串......但是当我在数据表中的字段是日期时间时我怎么能使用 setString ...... .
  • 您应该按照@Alan 的建议使用 SimpleDateFormat 格式化日期,并使用 .setString 方法将其作为字符串插入。看看这个类似的问题:stackoverflow.com/questions/2400955/…
  • 好的,现在我成功了,谢谢大家。是的,艾伦的回答是正确的。
【解决方案2】:

您需要格式化您的日期。试试下面的

Date date = new Date();
SimpleDateFormat format = new           SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
String currentDateTime = format.format(date);

然后在准备好的语句中使用 setString。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多