如何定义一个Sql参数的映射,在groovy中指定SqlType?

时间:2014-09-12 13:49:58

标签: spring groovy spring-jdbc

我想使用构造函数MapSqlParameterSource创建一个参数列表,它将地图作为输入。

唯一的问题是我不知道如何编写一个地图,它不仅会告诉MapSqlParameterSource ID和Value,还会告诉SqlType。

id = 1
desc = "Description"

insertSql = "INSERT INTO table(id,desc) VALUES (:idCode,:descCode)"

SqlParameterSource mapParam = new MapSqlParameterSource([idCode: id, descCode: desc])

通过这种方式,我可以创建SqlParameterSource,但我无法直接指定SqlTypes,并且我在其中一个测试中遇到了异常:

oracle.jdbc.driver.OracleSql.computeBasicInfo(OracleSql.java:950)
oracle.jdbc.driver.OracleSql.getSqlKind(OracleSql.java:623)
oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:1212)
oracle.jdbc.driver.T4CPreparedStatement.<init>(T4CPreparedStatement.java:28)
oracle.jdbc.driver.T4CDriverExtension.allocatePreparedStatement(T4CDriverExtension.java:68)
oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:3140)
oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:3042)
oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:6022)

我假设无法找到SqlType的手段。你是否同意我的假设?你有一个不是这样的解决方案吗?

mapParam = new MapSqlParameterSource()

mapParam.addValue("idCode", stock, Types.NUMBER)
mapParam.addValue("descCode", stockType, Types.VARCHAR)

1 个答案:

答案 0 :(得分:2)

尝试使用SqlParameterValue(int sqlType, Object value) constructor

将值包装在SqlParameterValue对象中