我最近开始遇到与WebSphere服务器打包在一起的db2驱动程序的问题,并且已经开始抛出数据截断错误。它看起来像是驱动程序端的事情,因为它在设置参数时发生在预准备语句中,并且正在设置的参数位于where子句中。
我进一步挖掘了这一点,发现它使用的是jt400.jar,看起来它属于JTOpen项目。试图找出jar的版本,并尝试升级它。
之前有没有人遇到过这种行为,并知道它的原因是什么?这是我们服务器上发生的间歇性问题,我们无法追踪它。
代码段
public static final String SQL_UPDATE = "UPDATE " + SQL_LIBRARY + ".DBPCPFILE SET PCPTHRU = ?, PCPFEIN = ?, PCPSFX = ?, PCPNPI = ?, PCPFAX = ?, PCPEMAIL = ?, PCPPARTYN = ?, PCPACCNEW = ?, PCPCHIPYN = ?, PCPNOTFEIN = ?, PCPNOPRACT = ?, PCPNOTSITE = ?, PCPELIG = ?, PCPIMAGENO = ?, PCPXTOFEIN = ?, PCPXTOSFX = ?, PCPXFRFEIN = ?, PCPXFRSFX = ?, PCPREASON = ?, PCPPARTHT = ? WHERE PCPGROUP = ? AND PCPPROV = ? AND PCPEFF = ?";
//WHERE CLAUSE
//Group Number
try {
//BigDecimal pcpNumberOfMedicalGroup = new BigDecimal(pcpProviderTO.getPcpNumberOfMedicalGroup()).setScale(0);
//psUpdate.setBigDecimal(parmIndex, pcpNumberOfMedicalGroup);parmIndex++;
String pcpNumberMedGroup = String.valueOf(pcpProviderTO.getPcpNumberOfMedicalGroup());
psUpdate.setString(parmIndex, pcpNumberMedGroup);parmIndex++;
} catch(DataTruncation e) {
LOG.error("Medical Group Number Is Too Large[" + pcpProviderTO.getPcpNumberOfMedicalGroup() + "] " +
"Allowed Size[" + e.getDataSize() + "] Sent Size[" + e.getTransferSize() + "] " +
"param or col value[" + (e.getParameter()? "param" : "col value") + "]",
e
);
throw e;
}
堆栈跟踪
[2016-05-20 08:57:23,542] WebContainer : 2 com.acordia.common.provider.dao.DB2PCPProviderDAO ERROR - Medical Group Number Is Too Large[1828] Allowed Size[4] Sent Size[1] param or col value[param]
java.sql.DataTruncation: Data truncation
at com.ibm.as400.access.AS400JDBCPreparedStatement.testDataTruncation(AS400JDBCPreparedStatement.java:3319)
at com.ibm.as400.access.AS400JDBCPreparedStatement.setValue(AS400JDBCPreparedStatement.java:3230)
at com.ibm.as400.access.AS400JDBCPreparedStatement.setString(AS400JDBCPreparedStatement.java:2868)
at com.ibm.ws.rsadapter.spi.InternalGenericDataStoreHelper.psSetString(InternalGenericDataStoreHelper.java:483)
at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.setString(WSJdbcPreparedStatement.java:1253)
at com.acordia.common.provider.dao.DB2PCPProviderDAO.update(DB2PCPProviderDAO.java:425)
at com.acordia.common.provider.businessdelegate.ProviderDelegate.copyPCP(ProviderDelegate.java:881)
at pagecode.secure.fragments.Frag_pcpphysicianmaintenance.doEditSaveAction(Frag_pcpphysicianmaintenance.java:711)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java(Compiled Code))
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java(Compiled Code))
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java(Compiled Code))
at java.lang.reflect.Method.invoke(Method.java(Compiled Code))
at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:127)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:73)
at javax.faces.component.UICommand.broadcast(UICommand.java:312)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:302)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:416)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:220)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:91)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1796)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1745)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:136)
at com.acordia.multiclaim.filter.PhysicianDataFilter.doFilter(PhysicianDataFilter.java:65)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:142)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:121)
at com.acordia.multiclaim.filter.MulticlaimFilter.doFilter(MulticlaimFilter.java:233)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:142)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:121)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:82)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:883)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:90)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1937)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:130)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:434)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:373)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:101)
at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java:566)
at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java:619)
at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java:952)
at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java:1039)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1498)