java sql - 将时间戳插入sql数据库

时间:2015-04-07 14:24:31

标签: java mysql sql

我正在尝试将时间戳插入数据库,但是我的代码抛出了一个异常,它告诉我这是我的sql语句。

显示的异常消息是:

  

“Rit_ToevoegenController.okKnop()中的Fout:RitDB.voegRitToe()中的SQLException - 语句”

okKnop是一种调用voegRitToe()的不同方法。

名为'starttijd'的列的类型是TIMESTAMP,而DB Data类型是DateTime。

我很确定它是导致问题的时间戳,因为其他2只是一个String和一个int。

任何帮助它的工作将不胜感激。我需要将时间和日期插入数据库以便稍后进行比较。

public void voegRitToe(Rit r) throws DBException{
    Timestamp starttijd = new Timestamp(System.currentTimeMillis());
    //Date date = new Date(starttijd.getTime());

    try(Connection conn = ConnectionManager.getConnection();){
        try(PreparedStatement stmt = conn.prepareStatement("insert into rit(starttijd, lid_rijksregisternummer, fiets_registratienummer) values(?,?,?)");){
            stmt.setTimestamp(1, starttijd);
            stmt.setString(2, r.getLid().getRegisterNr());
            stmt.setInt(3, r.getFiets().getRegisNr());
            stmt.execute();
        }
        catch(SQLException sqlEx){
            throw new DBException("SQLException in RitDB.voegRitToe() - statement");
        }

    }
    catch(SQLException sqlEx){
        throw new DBException("SQLException in RitDB.voegRitToe() - verbinding");
    }
}

enter image description here

1 个答案:

答案 0 :(得分:2)

TIMESTAMP和DATETIME用于不同的目的; TIMESTAMP用于自动加盖时间戳。

java.util.Date starttijd = new java.util.Date(System.currentTimeMillis());
java.util.Date starttijd = new java.util.Date(); // Or this

我猜你来的是时间戳,java.sql.Date通过将时间部分设置为零来包裹java.util.Date

如果数据库服务器的时间是正确的,那么也可以这样做:

... VALUES(NOW(), ?, ?)

顺便说一下,如果你有一个兼容java 8的驱动程序,java 8会引入新的日期/时间类并“改进”JDBC的使用。