Вызвано: java. sql .SQLException: недопустимый символ обнаружен в - PullRequest
0 голосов
/ 18 июня 2020

Я получаю сообщение об ошибке «Обнаружен недопустимый символ в» в результате запроса оператора SELECT SQL таблицы в производственной базе данных нашего клиента. Оператор SELECT: select * from A_TABLE where A_NUM = :A_NUM;. Когда значение A_NUM является строкой специфицированных c чисел, ошибка возникает как результат запроса. enter image description here

Однако ошибки не возникает, и результат SELECT может быть показан, когда значение A_NUM представляет собой другую строку чисел.

Я предполагаю, что это недействительно символ встречается в значении (ах) какого-либо поля в этой / той строке (ах) записи (й) таблицы, но я не могу найти никаких ошибок в каком поле (ах) в этом момент, пока я не смогу в следующий раз оценить производственную базу данных моего клиента.

В то же время я обнаружил связанную проблему в журнале сервера на производственном внутреннем сервере. Это должно быть вызвано кодировкой символов.

Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:124)
    at org.hibernate.loader.Loader.doList(Loader.java:2581)
    at org.hibernate.loader.Loader.doList(Loader.java:2564)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2394)
    at org.hibernate.loader.Loader.list(Loader.java:2389)
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:124)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1623)
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:374)
    at ...............
    at ...............
    at ...............
    at ...............
    ... 176 more
Caused by: java.sql.SQLException: Invalid character encountered in
    at oracle.sql.CharacterSet.failUTFConversion(CharacterSet.java:4915)
    at oracle.sql.CharacterSetAL32UTF8.toString(CharacterSetAL32UTF8.java:358)
    at oracle.xdb.XMLType.processString(XMLType.java:1640)
    at oracle.xdb.XMLType.processThin(XMLType.java:1669)
    at oracle.xdb.XMLType.<init>(XMLType.java:862)
    at oracle.xdb.XMLType.createXML(XMLType.java:481)
    at oracle.jdbc.driver.NamedTypeAccessor$XMLFactory.createXML(NamedTypeAccessor.java:295)
    at oracle.jdbc.driver.NamedTypeAccessor.getOracleObject(NamedTypeAccessor.java:641)
    at oracle.jdbc.driver.NamedTypeAccessor.getOPAQUE(NamedTypeAccessor.java:871)
    at oracle.jdbc.driver.GeneratedStatement.getOPAQUE(GeneratedStatement.java:1791)
    at oracle.jdbc.driver.GeneratedScrollableResultSet.getOPAQUE(GeneratedScrollableResultSet.java:4153)
    at oracle.jdbc.driver.GeneratedResultSet.getOPAQUE(GeneratedResultSet.java:5038)
    at ird.tp.backend.hibernate.UserXmlTypeHibernate.nullSafeGet(UserXmlTypeHibernate.java:56)
    at ird.tp.backend.hibernate.UserXmlTypeHibernate.nullSafeGet(UserXmlTypeHibernate.java:109)
    at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:127)
    at org.hibernate.type.AbstractType.hydrate(AbstractType.java:106)
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2924)
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1723)
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1655)
    at org.hibernate.loader.Loader.getRow(Loader.java:1537)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:718)
    at org.hibernate.loader.Loader.processResultSet(Loader.java:948)
    at org.hibernate.loader.Loader.doQuery(Loader.java:916)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:347)
    at org.hibernate.loader.Loader.doList(Loader.java:2578)
    ... 186 more

Запись (и) с недопустимым символом (ами) должна быть успешно вставлена ​​в эту таблицу раньше, и, следовательно, результат запроса выбора записи (записей), который значение A_NUM - это конкретная c строка чисел, это «Неверный символ обнаружен в», но не отсутствие записи. Как я могу решить проблему, если я знаю, какие значения поля содержат недопустимый символ (-а) позже? Что мне делать, чтобы изменить существующую программу? Возможно, мне нужно будет изменить существующий код для обработки значения данных перед вставкой записей в эту таблицу.

Спасибо.

...