Хобрук: Ваш путь к мастерству в программировании

QueryRunner возвращает ORA-00972: слишком длинный идентификатор передает значение в качестве параметра

Я не могу понять, почему использование переменной связывания в следующем коде терпит неудачу, но жесткое кодирование работает.
Это также работает, если я просто добавлю предложение rownum < 2 вместо предложения id.

Нет: использование переменных связывания прекрасно работает в других частях кода.

Информация о базе данных:

Oracle 12c
Столбец ID представляет собой VARCHAR2(34).

Работает:

    org.apache.commons.dbutils.QueryRunner remote = ...;
    String searchId = "13056899429626141414864120X"
    String sql = toString("SELECT * FROM ", remoteOwner, ".table_name WHERE id = '"+searchId+"'");
    result = remote.query(sql, new MapListHandler());

Не удается:

    org.apache.commons.dbutils.QueryRunner remote = ...;
    String searchId = "13056899429626141414864120X"
    String sql = toString("SELECT * FROM ", remoteOwner, ".table_name WHERE id = ?");
    result = remote.query(sql, new MapListHandler(), searchId);

Исключение:

Exception in thread "main" java.sql.SQLException: ORA-00972: identifier is too long
 Query: SELECT * FROM SCHEMA_NAME.table_name WHERE id = ? Parameters: [13056899429626141414864120X]
    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:329)

Корневое исключение (проглочено):

java.sql.SQLSyntaxErrorException: ORA-00972: identifier is too long

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:392)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:385)
    at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:1018)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
    at oracle.jdbc.driver.T4C8Odscrarr.doODNY(T4C8Odscrarr.java:96)
    at oracle.jdbc.driver.T4CPreparedStatement.doDescribe(T4CPreparedStatement.java:717)
    at oracle.jdbc.driver.OracleStatement.describe(OracleStatement.java:4404)
    at oracle.jdbc.driver.OracleResultSetMetaData.<init>(OracleResultSetMetaData.java:52)
    at oracle.jdbc.driver.OracleStatement.getResultSetMetaData(OracleStatement.java:4387)
    at oracle.jdbc.driver.OraclePreparedStatement.getMetaData(OraclePreparedStatement.java:5581)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.getMetaData(OraclePreparedStatementWrapper.java:1509)
    at oracle.jdbc.driver.OracleParameterMetaData.getParameterMetaData(OracleParameterMetaData.java:70)
    at oracle.jdbc.driver.OraclePreparedStatement.getParameterMetaData(OraclePreparedStatement.java:12861)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.getParameterMetaData(OraclePreparedStatementWrapper.java:1551)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.getParameterMetaData(DelegatingPreparedStatement.java:221)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.getParameterMetaData(DelegatingPreparedStatement.java:221)
    at org.apache.commons.dbutils.AbstractQueryRunner.fillStatement(AbstractQueryRunner.java:341)
    at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:386)
    at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:329)

Импортные банки:

.m2\repository\junit\junit\4.12\junit-4.12.jar
.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar
.m2\repository\org\apache\commons\commons-lang3\3.5\commons-lang3-3.5.jar
.m2\repository\commons-codec\commons-codec\1.10\commons-codec-1.10.jar
.m2\repository\org\apache\commons\commons-collections4\4.1\commons-collections4-4.1.jar
.m2\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar
.m2\repository\org\apache\logging\log4j\log4j-api\2.8\log4j-api-2.8.jar
.m2\repository\org\apache\logging\log4j\log4j-core\2.8\log4j-core-2.8.jar
.m2\repository\org\apache\logging\log4j\log4j-jcl\2.8\log4j-jcl-2.8.jar
.m2\repository\commons-io\commons-io\2.5\commons-io-2.5.jar
.m2\repository\commons-dbcp\commons-dbcp\1.4\commons-dbcp-1.4.jar
.m2\repository\commons-pool\commons-pool\1.5.4\commons-pool-1.5.4.jar
.m2\repository\com\oracle\ojdbc6\12.1.0.2.0\ojdbc6-12.1.0.2.0.jar
.m2\repository\com\oracle\oraclepki\12.1.0.2.0\oraclepki-12.1.0.2.0.jar
.m2\repository\com\oracle\osdt_cert\12.1.0.2.0\osdt_cert-12.1.0.2.0.jar
.m2\repository\com\oracle\osdt_core\12.1.0.2.0\osdt_core-12.1.0.2.0.jar
.m2\repository\commons-dbutils\commons-dbutils\1.7\commons-dbutils-1.7.jar

  • Какую версию драйвера Oracle JDBC вы используете? 03.07.2018
  • ojdbc6-12.1.0.2.0 05.07.2018
  • Аналогичный вопрос: stackoverflow.com/questions/22629438. Возможно, попробуйте использовать версию JAR-файла драйвера JDBC Oracle для Oracle 11g или Oracle 12.2.0.1. 05.07.2018

Новые материалы

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

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

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...