在Spring中使用getJdbcTemplate()。queryForList时出现异常

时间:2014-04-09 13:47:59

标签: java spring dao

我正在尝试使用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.CODER.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

2 个答案:

答案 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)