我正在尝试使用Spring getJdbcTemplate().queryForList(sql,params)
从oracle db中获取记录列表。
搜索SO以及谷歌但无法获得适当的解决方案。
问题是,如果我在SQL Developer中运行相同的查询它运行没有任何问题,但如果我尝试通过从我的Java代码JDBC模板传递参数调用相同的查询它抛出异常。
Dao Code:
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("CODE", Code);
paramMap.put("NAME", Name);
List statusCodesDetails = super.getJdbcTemplate().queryForList(selectSQL,paramMap);
SQL:
SELECT STATUS FROM PROCESS P,TRANSACTION R WHERE P.FILE_ID = R.FILE_ID and P.CODE = :CODE AND R.NAME = :NAME
在上面的查询中,P.CODE
和R.NAME
都是Varchar。
例外:
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [
SELECT STATUS FROM PROCESS P,TRANSACTION R WHERE P.FILE_ID = R.FILE_ID and P.CODE = :CODE AND R.NAME = :NAME
]; SQL state [99999]; error code [17004]; Invalid column type; nested exception is java.sql.SQLException: Invalid column type
任何人都可以告诉我这里的问题是什么,我做错了什么。
更新
我能够通过使用?因为我使用的是simplejdbctemplate,而是命名参数。我认为在jdbctemplate中使用命名参数时存在一些问题。
修改后的SQL:
SELECT STATUS FROM PROCESS P,TRANSACTION R WHERE P.FILE_ID = R.FILE_ID and P.CODE = ? AND R.NAME = ?
修改后的代码:
List statusCodesDetails = super.getJdbcTemplate().queryForList(selectSQL,new Object[]{CODE , NAME});
感谢大家的帮助。
由于 Vikeng21
答案 0 :(得分:0)
请检查您正在检索的每个属性的java兼容性中的数据类型和数据类型。 有时varChar(1)将不起作用所以使用varchar(2)就像这样..如果可能你可以发布数据类型DB和Java
答案 1 :(得分:0)
Spring JdbcTemplate会猜测sql类型,它似乎对你的数据类型无法正常工作。
使用Map<String, Object>
指定参数类型,而不是使用MapSqlParameterSource
使用addValue(String paramName, Object value, int sqlType)
。