org.apache.commons.dbcp.DbcpException: java.sql.SQLException: 不能在 UTF8 和 UCS2 之間

今天生產環境tomcat啓動後,用戶登錄時系統報錯:java.sql.SQLException: 不能在 UTF8 和 UCS2 之間轉換: failUTF8Conv

經確認數據庫、程序、TOMCAT均未進行示改動。

在網上查詢有說是oracle jdbc驅動的問題,但我本地使用ojdbc14.jar的驅動仍不行,

參考:http://blog.csdn.net/dacong910/article/details/5432245

本地程序連生產環境數據庫調試:

 

DBCP borrowObject failed: java.sql.SQLException: 不能在 UTF8 和 UCS2 之間轉換: failUTF8Conv
DBCP borrowObject failed: java.sql.SQLException: 不能在 UTF8 和 UCS2 之間轉換: failUTF8Conv
DBCP borrowObject failed: java.sql.SQLException: 不能在 UTF8 和 UCS2 之間轉換: failUTF8Conv
org.apache.commons.dbcp.DbcpException: java.sql.SQLException: 不能在 UTF8 和 UCS2 之間轉換: failUTF8Conv
	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:85)
	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:184)
	at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:722)
	at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:117)
	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:108)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:312)
	at com.eclink.util.DBUtil.getNewConnection(DBUtil.java:160)
	at com.eclink.util.DBUtil.<init>(DBUtil.java:133)
	at com.eclink.util.DBUtil.<init>(DBUtil.java:99)
	at com.eclink.dectr.model.sys.OfficePostDAO.getUserInfo(OfficePostDAO.java:93)
	at com.eclink.dectr.controller.sys.LogonValidatorAction.login(LogonValidatorAction.java:72)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
	at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1480)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:524)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at com.eclink.dectr.filter.ActionFilter.doFilter(ActionFilter.java:84)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at com.eclink.dectr.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:110)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:184)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:833)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:732)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:619)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:688)
	at java.lang.Thread.run(Thread.java:534)
Caused by: java.sql.SQLException: 不能在 UTF8 和 UCS2 之間轉換: failUTF8Conv
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
	at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1130)
	at oracle.jdbc.dbaccess.DBConversion.failUTF8Conv(DBConversion.java:2261)
	at oracle.jdbc.dbaccess.DBConversion.utf8BytesToJavaChars(DBConversion.java:2061)
	at oracle.jdbc.dbaccess.DBConversion.utf8BytesToString(DBConversion.java:1976)
	at oracle.jdbc.dbaccess.DBConversion.CharBytesToString(DBConversion.java:543)
	at oracle.jdbc.ttc7.TTIoer.processWarning(TTIoer.java:334)
	at oracle.jdbc.ttc7.O3log.receive2nd(O3log.java:523)
	at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:278)
	at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:346)
	at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:468)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314)
	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:83)
	... 52 more
DBCP borrowObject failed: java.sql.SQLException: 不能在 UTF8 和 UCS2 之間轉換: failUTF8Conv

 

發現具體異常是DBCP組件裏面拋出來的,參考文章中有一句話:

“後話:應該是因爲數據庫的密碼策略,增加了一步校驗的功能,而老驅動則不能識別這個校驗;”

剛好我發現,當使用plsql dev連接生產環境時會提示密碼即將過期,詢問是否要修改密碼。於是診斷應該是這個密碼校驗引起的,將數據庫修改一下,再改回來,重啓TOMCAT,應用正常。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章