Цитировать из документации Statement.executeQuery(String)
:
Выдает
SQLException
- если возникает ошибка доступа к базе данных, это
метод вызывается по закрытому Statement
заданному оператору SQL
создает объект ResultSet
, метод вызывается
PreparedStatement
или CallableStatement
Другими словами, использование executeQuery(String)
(или любого другого execute
метода, принимающего строку) является неправильным и должно вызывать исключение во всех JDBC-совместимых драйверах. Таким образом, исключение Sybase здесь является правильным и ожидаемым.
Это требование было введено в JDBC 4.1 (Java 7), ранее спецификация JDBC явно не содержала это требование, и, в частности, MySQL (и iirc MariaDB) Connector / J, к сожалению, до сих пор игнорируют эту часть спецификации.
Вы должны использовать
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
// set parameters
try (ResultSet rs = pstmt.executeQuery()) {
// process result set
}
}
или (если вы не используете параметризованные операторы):
try (Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
// process result set
}