一尘不染

Java在PreparedStatement中使用setDate

java

为了使我们的代码更加标准,我们被要求更改将SQL变量硬编码为预处理语句的所有位置,然后绑定变量。

但是我遇到了问题setDate()

这是代码:

        DateFormat dateFormatYMD = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        DateFormat dateFormatMDY = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
        Date now = new Date();
        String vDateYMD = dateFormatYMD.format(now);
        String vDateMDY = dateFormatMDY.format(now);
        String vDateMDYSQL =  vDateMDY ;
        java.sql.Date date = new java.sql.Date(0000-00-00);

   requestSQL = "INSERT INTO CREDIT_REQ_TITLE_ORDER (REQUEST_ID," + 
                " ORDER_DT, FOLLOWUP_DT) " +  "values(?,?,?,)";


                prs = conn.prepareStatement(requestSQL);

                prs.setInt(1,new Integer(requestID));

                prs.setDate(2,date.valueOf(vDateMDYSQL));
                prs.setDate(3,date.valueOf(sqlFollowupDT));

执行SQL时出现此错误:

    java.lang.IllegalArgumentException
    at java.sql.Date.valueOf(Date.java:138)
    at com.cmsi.eValuate.TAF.TAFModuleMain.CallTAF(TAFModuleMain.java:1211)

我应该setString()改为使用to_date()


阅读 772

收藏
2020-03-04

共1个答案

一尘不染

使用 java.sql.Date

如果表中的列类型为DATE:

java.lang.String

该方法java.sql.Date.valueOf(java.lang.String)接收到一个字符串,该字符串代表格式的日期yyyy-[m]m-[d]d。例如:

ps.setDate(2, java.sql.Date.valueOf("2013-09-04"));

java.util.Date

假设你有一个endDatetype类型的变量java.util.Date,则可以这样进行转换:

ps.setDate(2, new java.sql.Date(endDate.getTime());

当前

如果要插入当前日期:

ps.setDate(2, new java.sql.Date(System.currentTimeMillis()));

// Since Java 8
ps.setDate(2, java.sql.Date.valueOf(java.time.LocalDate.now()));

使用 java.sql.Timestamp

如果表中的列类型为TIMESTAMP或DATETIME:

java.lang.String

该方法java.sql.Timestamp.valueOf(java.lang.String)接收到一个字符串,该字符串代表格式的日期yyyy-[m]m-[d]d hh:mm:ss[.f...]。例如:

ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00");

java.util.Date

假设你有一个endDatetype类型的变量java.util.Date,则可以这样进行转换:

ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));

当前

如果你需要当前时间戳记:

ps.setTimestamp(2, new java.sql.Timestamp(System.currentTimeMillis()));

// Since Java 8
ps.setTimestamp(2, java.sql.Timestamp.from(java.time.Instant.now()));
ps.setTimestamp(2, java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()));
2020-03-04