当我试图用准备好的语句插入到数据库中时发生错误。我试图添加到当前日期,以创建一个新的到期日期使用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值(?,?,?,dateadd(?,?),?,?,?)--(?1,?2,?3,?4,?5,dateadd('',?6,?7),?8,?9,?10)[22018-200]
下面是为sql语句的数据发送的内容。
weeks.setText("'WEEK'");
months.setText("'MONTH'");
1条答案
按热度按时间nimxete21#
h2的最新版本不再支持此函数中日期时间单位的参数化,因为它会导致其他问题。不幸的是,h21.4.200抛出了一个奇怪的异常,而不是实际的异常,这个问题在该版本之后得到了修复。
您需要直接指定日期时间单位(
DATEADD(MONTH, ?, ?)
). 如果需要支持多个单元,可以使用案例:你还需要使用
setText("MONTH")
而不是"'MONTH'")
(或者您可以使用'MONTH'
在这个案子里WHEN '''MONTH''' THEN …
).