当前位置: 首页 > 面试题库 >

Java在PreparedStatement中使用setDate

邵子平
2023-03-14
问题内容

为了使我们的代码更加标准,我们被要求更改将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()


问题答案:

使用 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()));


 类似资料:
  • 问题内容: 为了使我们的代码更加标准,我们被要求更改将SQL变量硬编码为预处理语句的所有位置,然后绑定这些变量。 但是我遇到了问题。 这是代码: 我在执行SQL时收到此错误: 我应该改为使用? 问题答案: Using 使用 如果您的表的列类型为: 该方法接收到一个字符串,该字符串表示格式为日期的日期。例如: 假设您有一个type类型的变量,则可以这样进行转换: 当前的 如果要插入当前日期: Usi

  • 为了使我们的代码更加标准,我们被要求将所有我们将SQL变量硬编码为准备好的语句的地方改为绑定变量。

  • 问题内容: 有人可以解释如何使用完全准备好的使用dbcp的连接池吗?(如果可能,请提供一些示例代码)。我已经弄清楚了如何打开它- 将KeyedObjectPoolFactory传递给PoolableConnectionFactory。但是,那之后如何定义特定的准备好的语句呢?现在,我仅使用PoolingDataSource从池中获取连接。如何使用池中准备好的语句? 问题答案: 在谈论从池中获得连接

  • 如果我们运行查询(带或不带where子句参数),它都能正常工作。 如果我们在准备好的语句中使用硬编码的参数运行查询,它也可以正常工作。 如果以编程方式设置prepared语句的参数,则不起作用。 以上测试确认JDBC连接正常工作。 使用PreparedStatement、JdbcTemplate或NamedParameterJdbcTemplate时也会出现相同的错误,因此我怀疑PreparedS

  • 问题内容: 一直很麻烦的一件事是,当您具有PreparedStatement而不是查询本身时,记录SQL(JDBC)错误。 您总是会收到以下消息: 当然,我可以编写一个辅助方法来检索值并用实际值解析/替换问号(如果我没有得到这个问题的结果,很可能会走这条路),但是我只是想知道是否此问题已由其他人解决,并且/或者是否有任何通用的日志记录帮助程序可以自动为我完成此任务。 经过几个答案编辑: 到目前为止

  • 问题内容: 由于某些奇怪的原因,我似乎无法将UTF-8数据添加到我的MySQL数据库中。输入非拉丁字符时,将其存储为?????。其他所有东西都存储良好。因此,例如,“ this is aexample®™”可以很好地存储,而“和英辞典”则存储为“ ????”。 连接网址很好: 正如您所料,我正在使用PreparedStatement,甚至有人尝试输入“ set names utf8”。 该表本身似