繁体   English   中英

org.h2.jdbc.JdbcSQLDataException:数据转换错误转换“'MONTH'”; SQL 声明:

[英]org.h2.jdbc.JdbcSQLDataException: Data conversion error converting “'MONTH'”; SQL statement:

当我尝试使用 Prepared Statement 插入数据库时发生错误。 我正在尝试使用我的 H2 嵌入式数据库中的 DateAdd function 添加到当前日期以创建新的到期日期。

        PreparedStatement sql = c.prepareStatement("INSERT INTO BLOOMHEALTH.CLIENTS VALUES ( ?,?,?,?,?,DATEADD(?,?,?),?,?,?)");
        String mem = bloomClient.getSsMember();
        try {
            sql.setString(1,bloomClient.getFirstName());
            sql.setString(2,bloomClient.getLastName());
            sql.setString(3,bloomClient.getPhoneNumber());
            sql.setString(4,bloomClient.getBirthday());
            sql.setString(5,bloomClient.getStartDate());
            sql.setString(6,text);
            sql.setInt(7,num);
            sql.setString(8,systemDate());
            sql.setInt(9,bloomClient.getSessionAmount());
            sql.setString(10,bloomClient.getTrainer());
            sql.setString(11,bloomClient.getSsMember());// problem here aswell, says invalid parameter(unsure why)
            sql.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }

确切的例外是:

org.h2.jdbc.JdbcSQLDataException:数据转换错误转换“'MONTH'”; SQL 声明:INSERT INTO BLOOMHEALTH.CLIENTS VALUES (?,?,?,?,?,DATEADD(?,?,?),?,?,?) -- (?1, ?2, ?3, ?4, ?5, DATEADD('', ?6, ?7), ?8, ?9, ?10) [22018-200]

以下是 SQL 语句的数据发送的内容。

        weeks.setText("'WEEK'");
        months.setText("'MONTH'");

H2 的最新版本不再支持此 function 中日期时间单位的参数化,因为它会导致其他问题。 不幸的是,H2 1.4.200 抛出了一个奇怪的异常而不是实际的异常,这个问题在该版本之后得到了修复。

您需要直接指定日期时间单位( DATEADD(MONTH, ?, ?) )。 如果需要支持多个单元,可以使用一个案例:

INSERT INTO BLOOMHEALTH.CLIENTS VALUES (?1, ?2, ?3, ?4, ?5,
CASE ?6
    WHEN 'MONTH' THEN DATEADD(MONTH, ?7, ?8)
    WHEN 'WEEK' THEN DATEADD(WEEK, ?7, ?8)
    -- put all additional units here
END
?9, ?10, ?11)

您还需要使用setText("MONTH")而不是"'MONTH'") (或者您可以在WHEN '''MONTH''' THEN …的情况下使用'MONTH' MONTH')。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM