Я получаю сообщение об ошибке «Обнаружен недопустимый символ в» в результате запроса оператора SELECT SQL таблицы в производственной базе данных нашего клиента. Оператор SELECT: select * from A_TABLE where A_NUM = :A_NUM;
. Когда значение A_NUM является строкой специфицированных c чисел, ошибка возникает как результат запроса.
Однако ошибки не возникает, и результат 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 строка чисел, это «Неверный символ обнаружен в», но не отсутствие записи. Как я могу решить проблему, если я знаю, какие значения поля содержат недопустимый символ (-а) позже? Что мне делать, чтобы изменить существующую программу? Возможно, мне нужно будет изменить существующий код для обработки значения данных перед вставкой записей в эту таблицу.
Спасибо.