Распространяет DBUtils Oracle 11.2.0.4 с Java 1.7 Параметры привязки SQLException ORA-00942 - PullRequest
0 голосов
/ 05 ноября 2019

Я работаю с Oracle Database 11.2.0.4 с ojdbc6.jar, и я использую apache commons dbutils v1.7, с JDK 7. Поэтому я использую QueryRunner и его метод в этой функции

private <T> List<T> executeQueryAndReturnBeanList(String query, Class<T> className, Object... param) throws SQLException {

     Connection connection = getDBConnectionInstance();

     DbUtils.loadDriver("oracle.jdbc.driver.OracleDriver");

     ResultSetHandler<List<T>> beanListHandler = new BeanListHandler<>(className,new BasicRowProcessor(new GenerousBeanProcessor()));

     QueryRunner runner = new QueryRunner();

     List<T> list = runner.query(connection, query, beanListHandler, param);

     return list;
}

и все нормально работает с запросом выбора без параметров привязки

SELECT * FROM PEOPLE WHERE GRUPPO = 1 AND LANG = 'en_US'

Но когда я выполняю этот запрос

String query = "SELECT * FROM PEOPLE WHERE GRUPPO = ? AND LANG = ?";

Это дает мне исключение SQL

java.sql.SQLException: ORA-00942: table or view does not exist
 Query: SELECT * FROM PEOPLE WHERE GRUPPO = ? AND LANG = ? Parameters: [1, en_US]
        at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:527)
        at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:391)
        at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:252)
        at mypackage.executeQueryAndReturnBeanList(JDBCFunctions.java:199)

Я действительно не знаю почему. Я пытался использовать : P1,: P2 или : 1,: 2 вместо ? для привязки параметров, но ничего не произошло. Есть идеи?

1 Ответ

0 голосов
/ 05 ноября 2019

Группа является зарезервированным словом и не может использоваться в качестве имени столбца или таблицы. Скорее всего, у вас есть имя столбца в кавычках, например "GROUP" в таблице.

Таким образом, необходимо выполнить запрос как SELECT * FROM PEOPLE WHERE "GROUP" = 1 AND LANG = 'en_US'

Имена таблиц в кавычках должны быть чувствительными к регистру, в отличие от имен без кавычек.

Вышеприведенная ошибка является основной, а ошибка(ORA-00942) предполагает, что ваше приложение подключается к другой схеме, чем схема, в которой успешно проверен запрос.

...