如何在数据库中插入java.util.Date?

hib*_*ara 3 java jdbc

我想在数据库中插入一个日期,但它不会出现任何出现的错误消息.当我在Oracle DB中查看我的表时,我找不到我插入的数据.

java.util.Date daterecep;
// getter and setter
public void setdaterecep( java.util.Date daterecep) {
         this.daterecep=daterecep;
} 
public  java.util.Date getdaterecep() {
       return  daterecep;
}
Run Code Online (Sandbox Code Playgroud)

    nt val=0;
    try {
        val = st.executeUpdate("insert into tabdate (date) values('"+daterecep+"')" );
    } catch (SQLException ex) {
         Logger.getLogger(Insertdate.class.getName()).log(Level.SEVERE, null, ex);
    }

    System.out.println(val);
    return resultat;
}
Run Code Online (Sandbox Code Playgroud)

我使用了PreparedStatement,但它没有用,我只是尝试执行Java代码

val = st.executeUpdate("insert into tabdate(date) values('12/12/2004')");
Run Code Online (Sandbox Code Playgroud)

并添加

public static void main (String args[]) throws SQLException {

    Insertdate B= new Insertdate();
    B.connexionBD();
    B.insert();//function for the insertion
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理.

Bal*_*usC 15

这里,

values('"+daterecep+"')
Run Code Online (Sandbox Code Playgroud)

你基本上试图将结果存储daterecep.toString()在数据库中.根据文档,其格式如"Sat Jun 6 10:43:00 BOT 2011"(取决于区域设置和时区!).数据库不理解它.

您应该使用在DB中PreparedStatement#setTimestamp()设置DATETIME/ TIMESTAMPfield.

preparedStatement = connection.prepareStatement("insert into tabdate (date) values(?)" );
preparedStatement.setTimestamp(1, new Timestamp(daterecep.getTime()));
preparedStatement.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

或者当它实际上是一个DATE字段时,请setDate()改用.

preparedStatement.setDate(1, new java.sql.Date(daterecep.getTime()));
Run Code Online (Sandbox Code Playgroud)

作为奖励,PreparedStatement还可以避免SQL注入攻击.

也可以看看: