2016-11-15 13 views
0

В настоящее время пытается получить очень простой запрос для запуска с помощью JdbcTemplate против БД Oracle, работает в следующее сообщение об ошибке:Oracle Invalid Column на простой подсчет запроса

PreparedStatementCallback; uncategorized SQLException for SQL; Invalid column type; nested exception is java.sql.SQLException: Invalid column type

Колонны

SYSTEM_UNIQUE_ID VARCHAR2(50 CHAR) 
SYSTEM_TYPE_ID  NUMBER(4,0) 

Звонок

public int getSystemUniqueIDCount(final String systemUniqueID, final String systemTypeID) throws SQLException { 

    String checkCountQuery = "select count(*) as count from master_account where system_unique_id = ? and system_type_id = ?"; 

    Map<String, Object> row = getTemplate().queryForMap(checkCountQuery , new PreparedStatementSetter() { 

     @Override 
     public void setValues(PreparedStatement pstmt) throws SQLException { 
      pstmt.setString(1, systemUniqueID.toUpperCase()); 
      pstmt.setInt(2, Integer.parseInt(systemTypeID)); 
     } 

    }); 

    return (int) row.getOrDefault("count", 0); 
} 

Любая помощь будет очень полезна.

+0

Разве это не попытка использования 'PrepardStatementSetter' [в качестве аргумента] (http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/ JdbcTemplate.html # queryForMap-java.lang.String-java.lang.Object ...-)? (Не то, что я использовал, но я не могу сопоставить то, что вы делаете с документами - возможно, я не вижу ничего очевидного!) –

+0

Я согласен с Алексом, и я не понимаю, как ваш текущий фрагмент компилируется и, следовательно, как вы могли видеть runtime 'SQLException' с тем, что вы разделили. Вы хотите использовать 'queryForMap()' или, возможно, просто ['query()'] (http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core /JdbcTemplate.html#query-java.lang.String-java.lang.Object:A-org.springframework.jdbc.core.ResultSetExtractor-)? –

+0

@AlexPoole после перезаписи документов вы можете использовать PreparedStatementSetter в качестве аргумента в запросе(), который я использовал широко, но не в queryformap(), который был бы там, где моя проблема. Почему он компилируется? По-видимому, PreparedStatementSetter считается действительным массивом объектов, хотя и фактически не представляет никакой ценности. Я переключился на query(), и теперь все работает так, как планировалось. благодаря вам и Мику. – iamthereplicant

ответ

0

queryForMap() не принимает параметр PreparedStatementSetter() в качестве аргумента, и вместо этого в моем случае предполагалось, что это был объект []. Это означало, что он пытался вставить значение самого подготовленного состояния самого себя в качестве параметра в запросе, который, очевидно, взрывается.

Благодаря Майку Мнемонику и Алексу Пулу.

Смежные вопросы