当我尝试用准备好的语句插入数据库时,会发生错误。我试图添加到当前日期,以便使用我的DateAdd嵌入式数据库中的H2函数创建一个新的过期日期。
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:转换“月份”的数据转换错误;SQL语句:插入BLOOMHEALTH.CLIENTS值( ?,?),?) - (?1,?2,?3,?4,?5,DATEADD(‘,?6,?7),?8,?9,?10) 22018-200
下面是为SQL语句发送的数据。
weeks.setText("'WEEK'");
months.setText("'MONTH'");发布于 2020-12-19 01:46:49
最近发布的H2不再支持此函数中日期时间单元的参数化,因为它会引发其他问题。不幸的是,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' )。
https://stackoverflow.com/questions/65348129
复制相似问题