Ошибка чтения поля varchar db2 с помощью jpa

1

Я получаю ошибку каждый раз, когда я пытаюсь заполнить атрибут из моего Javaclass информацией, хранящейся в таблице Db2. Только атрибут String вызывает проблемы.

Я использую JPA (EclipseLink). Поле с проблемой - "имя1" и объявлено в моем классе как переменная String.

Ошибка происходит только с этим Entity, получение информации от других Entities не вызывает исключений.

Это мой prinstack:

sun.io.MalformedInputException
at sun.io.ByteToCharUTF8.convert(Unknown Source)
at com.ibm.db2.jcc.b.v.a(v.java:16)
at com.ibm.db2.jcc.b.gc.a(gc.java:1803)
at com.ibm.db2.jcc.b.gc.n(gc.java:503)
at com.ibm.db2.jcc.b.gc.P(gc.java:1723)
at com.ibm.db2.jcc.b.ul.e(ul.java:1270)
at com.ibm.db2.jcc.b.ul.getObject(ul.java:1252)
at org.eclipse.persistence.internal.databaseaccess.DatabasePlatform.getObjectFromResultSet(DatabasePlatform.java:1344)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.getObject(DatabaseAccessor.java:1300)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.fetchRow(DatabaseAccessor.java:1075)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.processResultSet(DatabaseAccessor.java:768)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:655)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:558)
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1991)
at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:299)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:694)
at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2738)
at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2691)
at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:495)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1168)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1127)
at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:403)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1215)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1793)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1775)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1740)
at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258)
at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:469)
at de.basler.archivierung.db2.dao.fi.Kreditoren_SaldenListeDAO.findView(Kreditoren_SaldenListeDAO.java:39)
at de.basler.archivierung.service.view.fi.Service_Kreditoren_SaldenListe.findViewInhalt(Service_Kreditoren_SaldenListe.java:19)
at de.basler.archivierung.web.controller.fi.ControllerFIKreditoren.search(ControllerFIKreditoren.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:96)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:74)
at javax.faces.component.UICommand.broadcast(UICommand.java:120)
at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1172)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:365)
at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1656)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:862)
at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:42)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:196)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:143)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
  • 0
    Какой тип в базе данных, и что драйвер возвращает для него при непосредственном использовании JDBC? Похоже, что драйвер не может преобразовать данные в поле в формат CharUTF8, поэтому вам может потребоваться проверить тип поля и данные в базе данных и сопоставить их с чем-то другим.
Теги:
jpa
utf-8
eclipselink
varchar

2 ответа

1

Я решил аналогичную проблему, используя эту

@Column(name = "evt_description", length=2000)
String description;

в моем случае проблема имеет то, что описание имеет размер больше 255

1

Тип в базе данных - Varchar. Используя JBDC напрямую, я также получаю исключение. Я использую тот же драйвер для подключения к другой БД и никогда не имел проблем. Может ли драйвер иметь проблемы с кодировкой из БД?

Stacktrace, когда я использую непосредственно JDBC:

com.ibm.db2.jcc.b.SqlException: [jcc][t4][1065][12306][3.53.70] Bedingung java.io.CharConversionException abgefangen. Details finden Sie im angehängten Element der Throwable-Klasse. ERRORCODE=-4220, SQLSTATE=null
at com.ibm.db2.jcc.b.bd.a(bd.java:660)
at com.ibm.db2.jcc.b.bd.a(bd.java:60)
at com.ibm.db2.jcc.b.bd.a(bd.java:112)
at com.ibm.db2.jcc.b.gc.a(gc.java:1807)
at com.ibm.db2.jcc.b.gc.n(gc.java:503)
at com.ibm.db2.jcc.b.gc.D(gc.java:1143)
at com.ibm.db2.jcc.b.ul.getDouble(ul.java:806)
at de.basler.archivierung.Main.main(Main.java:25)
Caused by: java.nio.charset.MalformedInputException: Input length = 34
at com.ibm.db2.jcc.b.v.a(v.java:19)
at com.ibm.db2.jcc.b.gc.a(gc.java:1803)
... 4 more
Caused by: sun.io.MalformedInputException
at sun.io.ByteToCharUTF8.convert(Unknown Source)
at com.ibm.db2.jcc.b.v.a(v.java:16)
... 5 more

"Это нужно добавить к вопросу, а не добавить в качестве ответа".

Простите за это.

Я выделил поле, которое вызывает проблемы. В столбце указано название корпораций. Пример "Дюссельдорф". Некоторые струны могут иметь чешский характер. DB-кодирование.

Спасибо за помощь.

  • 0
    Это должно быть добавлено к вопросу, а не добавлено как ответ. Запрос возвращает данные, которые не нравятся драйверу. Вам придется изолировать данные, которые вызывают проблему, чтобы определить, что происходит не так. Попробуйте найти конкретную строку, которая не может быть прочитана, и опубликовать строковые данные - похоже, это связано с преобразованием символов данных, не относящихся к UTF-8, и вам, возможно, придется обратиться к документации драйвера, чтобы решить

Ещё вопросы

Сообщество Overcoder
Наверх
Меню