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

在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()


问题答案:

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

Using 使用 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变量硬编码为预处理语句的所有位置,然后绑定变量。 但是我遇到了问题。 这是代码: 执行SQL时出现此错误: 我应该改为使用? 问题答案: 使用 java.sql.Date 如果表中的列类型为DATE: 该方法接收到一个字符串,该字符串代表格式的日期。例如: 假设你有一个类型的变量,则可以这样进行转换: 当前 如果要插入当前日期: 使用 j

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

  • 问题内容: 我正在尝试执行一个查询,该查询返回一个名和姓串联在一起的学生,该名与搜索键参数相等。 为此,我在班级中管理与班级数据库相关的任何事情。 执行查询时,出现以下错误: 怎么了?我已经检查过这是正确的使用方法 。 并且是在MySQL数据库中。 问题答案: 您的问题是您准备的陈述 正确,但是当您尝试执行PreparedStatement时,将再次提供该字符串: 那是不对的。您已经准备好该语句,

  • 问题内容: 查询代码和查询: 返回一个空值。 通过基本调试,我发现了它的第三个绑定,即问题 我尝试了各种变体,其中最明智的似乎是在使用: 但这不起作用,因为我错过了连接字符串的任一侧,所以我尝试: 但我似乎无法找到一种方法使它们起作用。 我想念什么? 问题答案: 首先,占位符(那些占位符)仅用于 列值 ,而不用于表名,列名,SQL函数/子句等。最好改用。其次,你应该 不 引用占位符一样,它只会ma

  • 我有一个teradata表: 我想从Java批量插入: 我得到以下错误: 有什么想法吗? 我尝试按您下面的建议分别运行每个语句,但出现错误:[error 2644][SQLState HY000]数据库中没有更多空间