mar*_*pro 8 java spring h2 spring-test spring-boot
我正在使用带有H2的内存数据库测试Dao.我正在使用map传递一个int来执行它.此查询在Oracle SQL上运行正常,但在H2中没有成功.
DAO
@Override
public int deleteCancelled(int days) {
final Map<String, Object> namedParameters = new HashMap<String, Object>();
namedParameters.put(DAYS, days);
namedParameters.put(STATUS, StatusEnum.CANCELLED.toString());
int updated = this.namedParameterJdbcTemplate.update(Query.QUERIES.DELETE_CANCELLED, namedParameters);
return updated;
}
Run Code Online (Sandbox Code Playgroud)
QUERIES
public static final String DELETE_CANCELLED = "DELETE FROM MY_TABLE "
+ "WHERE UPDATE_TS < SYSDATE - :days AND STATUS = :status";
Run Code Online (Sandbox Code Playgroud)
当我尝试在H2上执行此查询时,它返回:
错误
org.springframework.jdbc.UncategorizedSQLException:
PreparedStatementCallback; uncategorized SQLException for SQL [DELETE FROM
MY_TABLE WHERE UPDATE_TS < SYSDATE - ? AND STATUS = ?]; SQL state
[HY004]; error code [50004]; Unknown data type : "?"
Unknown data type: "?"; SQL statement:
DELETE FROM MY_TABLE WHERE UPDATE_TS < SYSDATE - ? AND STATUS = ?
[50004-196]; nested exception is org.h2.jdbc.JdbcSQLException: Unknown data
type : "?"
Unknown data type: "?"; SQL statement:
DELETE FROM MY_TABLE WHERE UPDATE_TS < SYSDATE - ? AND STATUS = ?
[50004-196]
Run Code Online (Sandbox Code Playgroud)
我尝试在查询中执行查询硬编码(SYSDATE = 4)并且它工作,也尝试将原始int包装到Integer.valueOf(天)并使用MapSqlParameterSource指定哪种数据类型,但两者都没有工作.
为什么不起作用?有谁知道?提前致谢.
编辑:
StatusEnum
public enum StatusEnum {
CANCELLED("Cancelled"),
CONFIRMED("Confirmed"),
PENDING("Pending"),
SENT("Sent"),
private final String text;
/**
* @param text
*/
private StatusEnum(final String text) {
this.text = text;
}
/* (non-Javadoc)
* @see java.lang.Enum#toString()
*/
@Override
public String toString() {
return text;
}
Run Code Online (Sandbox Code Playgroud)
}
出现此异常似乎是因为H2在编译时尝试对语句进行类型检查,并且不能唯一地确定参数的类型:它可以是日期,也可以是数字,或者可能是其他内容.
SYSDATE - ?
Run Code Online (Sandbox Code Playgroud)
同
SYSDATE - CAST(? AS INTEGER)
Run Code Online (Sandbox Code Playgroud)
我检查了这个,它适用于H2和Oracle.
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |