我的客户生产数据库中的表的SELECT SQL语句的查询结果中出现错误“遇到无效字符”。 SELECT语句为:select * from A_TABLE where A_NUM = :A_NUM;
。当A_NUM的值是特定的数字字符串时,将导致错误作为查询结果。
但是,当A_NUM的值为另一个数字字符串时,不会导致任何错误,并且可以显示SELECT结果。
我猜在表的该行的某字段的某个字段的值中遇到无效字符,但是我找不到任何直到现在我下次可以评估客户的生产数据库之前,在哪个字段中都会出现错误。
同时,我从生产后端服务器中的服务器日志中找到了相关问题。应该是由于编码字符引起的。
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的值是特定的数字字符串。中遇到的字符”,但不是没有记录。 如果以后我知道哪个字段值包含无效字符,该如何解决该问题?我应该怎么做才能修改现有程序?可能是,在将记录插入到该表之前,我需要修改现有代码以处理数据值。
谢谢。