Таблица исключений или представление JDBC-шаблона не существует, но фактически существует - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь получить некоторые данные из БД Oracle, используя Spring JDBCTemplate:

String query = "SELECT * FROM snow.ar_incident WHERE ROWNUM < 10";

    Map<String, List<Attachment>> map = jdbcTemplate.query(query, new ResultSetExtractor<Map<String, List<Attachment>>>() {

        @Override
        public Map<String, List<Attachment>> extractData(ResultSet rs) throws SQLException, DataAccessException {
            Map<String, List<Attachment>> map = new HashMap<>();
            //Mapping results to map
            return map;
        }
    });

Но я всегда получаю исключение только для ar_incidient таблицы:

Причина: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; плохая грамматика SQL [SELECT * from snow.ar_incident ГДЕ ROWNUM <10]; вложенное исключение java.sql.SQLSyntaxErrorException: ORA-00942: таблица или представление не есть </p>

Этот код прекрасно работает для других таблиц, но не для этой. Я также пытался получить данные из этой таблицы, используя базовое соединение Java sql:

Class.forName("oracle.jdbc.driver.OracleDriver");  
Connection con = DriverManager.getConnection(connString, user, pass);    
Statement stmt=con.createStatement();   
ResultSet rs = stmt.executeQuery("SELECT * from snow.ar_incident WHERE ROWNUM < 10");  

И это работало без проблем, то же самое, когда я запускал запрос в SQL Developer. Я много раз проверял детали подключения для обоих решений, и они идентичны. Почему я не могу получить доступ к таблице ar_incident с помощью JDBCTemplate?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

После обновления драйвера JDBC до более новой версии все проблемы исчезли.

0 голосов
/ 29 августа 2018

Это может быть вызвано тем, что у вас нет привилегий выбора для этой конкретной таблицы

grant select on snow.ar_incident to your_user;
...