Java postgresql中的日期

Java postgresql中的日期,java,postgresql,date,Java,Postgresql,Date,如何将java日期对象插入Postgresql日期单元格 当我按自己的方式做事时,它是错误的: Calendar date = Calendar.getInstance(); // wrong Date date = new Date(); // wrong String addRecord = "INSERT INTO " + GlobalFields.PACJENCI_TABLE + "VALUES (" +

如何将java日期对象插入Postgresql日期单元格

当我按自己的方式做事时,它是错误的:

Calendar date = Calendar.getInstance(); // wrong
Date date = new Date(); // wrong         

String addRecord = "INSERT INTO " + GlobalFields.PACJENCI_TABLE +
                                "VALUES (" + date + ");";
stat.executeUpdate(addRecord)
我没有更多的想法

附言:

这就是问题所在:

String addRecord = "INSERT INTO " + GlobalFields.PACJENCI_TABLE +
                   "VALUES (" + date + ");";
您正在将
日期
转换为字符串,并将其包含在SQL中。不要那样做。这里根本不需要使用字符串转换

相反,请使用并将值作为或可能通过参数插入


您几乎应该始终避免将值作为字符串包含在SQL中,而是使用参数化SQL,并在语句中设置值。这使您的SQL(代码)与参数(数据)保持分离,避免了数据转换问题的风险,也避免了。

使用并传递日期作为参数,而不是通过串接字符串来创建SQL(这是这里的问题,因为Postgres肯定不理解Java对日期的字符串表示)。
除了其他优点(预编译语句,…),它还允许您将日期作为
date
传递,并让JDBC和底层数据库驱动程序为您完成所有必要的数据转换工作。

您根本不应该这样做

永远不要构造包含参数的SQL字符串。相反,请创建一个并在其上设置参数。像这样:

    String addRecord = "INSERT INTO " + GlobalFields.PACJENCI_TABLE + "VALUES (?);";
    PreparedStatement stmt = conn.prepareStatement(addRecord);
    stmt.setDate(1, new Date(System.currentTimeMillis()));
    stmt.executeUpdate();

请注意,
Date
中有一个,它是普通
java.util.Date
的子类,其中一天的时间总是UTC午夜;它用于表示实际日期,而不是时间上的某个时刻。您也可以使用,它表示一个时刻。

这就是SQL注入开始的地方。。。那是20世纪,不要犯别人在你之前犯过的错误,要从中吸取教训
    String addRecord = "INSERT INTO " + GlobalFields.PACJENCI_TABLE + "VALUES (?);";
    PreparedStatement stmt = conn.prepareStatement(addRecord);
    stmt.setDate(1, new Date(System.currentTimeMillis()));
    stmt.executeUpdate();