程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> ORA-12899:列XX的值太大

ORA-12899:列XX的值太大

編輯:Oracle教程

   hibernate保存數據到oracle數據庫時,報如下錯誤:
?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 20:25:56,593  WARN JDBCExceptionReporter:100 - SQL Error: 12899, SQLState: 72000 20:25:56,593 ERROR JDBCExceptionReporter:101 - ORA-12899: 列 "ITS"."VIO_BUSINESS_RESPONSE_I"."RESPONSE" 的值太大 (實際值: 521, 最大值: 512)   20:25:56,593  WARN JDBCExceptionReporter:100 - SQL Error: 12899, SQLState: 72000 20:25:56,593 ERROR JDBCExceptionReporter:101 - ORA-12899: 列 "ITS"."VIO_BUSINESS_RESPONSE_I"."RESPONSE" 的值太大 (實際值: 521, 最大值: 512)   20:25:56,593 ERROR AbstractFlushingEventListener:324 - Could not synchronize database state with session org.hibernate.QueryTimeoutException: Could not execute JDBC batch update     at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:124)     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)     at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:262)     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:178)     at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)     at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)     at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)     at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)     at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)     at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManage r.java:656)     at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatform Tr ansactionManager.java:754)     at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransa ctionManager.java:723)     at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(Transaction AspectSupport.java:393)     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)     at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)     at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)     at $Proxy45.queryObjectOut(Unknown Source)     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:597)     at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)     at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)     at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.invoke(AbstractJAXWSMethodInvoker.java:178)     at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:68)     at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)     at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)     at java.util.concurrent.FutureTask.run(FutureTask.java:138)     at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)     at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:107)     at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)     at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)     at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)     at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)     at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)     at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)     at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)     at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)     at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)     at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)     at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)     at java.lang.Thread.run(Thread.java:662) Caused by: java.sql.BatchUpdateException: ORA-12899: 列 "ITS"."VIO_BUSINESS_RESPONSE_I"."RESPONSE" 的值太大 (實際值: 521, 最大值: 512)       at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)     at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10656)     at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)     at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)     at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)     ... 55 more

  疑問:明明對將要插入的字符串做了subString(0,512),為什麼說實際值為521,?

  解答:這是因為要插入的字符串含有中文,中文在subString時是占據一個位置,但在數據庫中不止一個位置。

  解決:1、對插入的字符串盡量截取少點,如subString(0, 400)

  2、對插入的字符串編碼先編碼處理再截取,如Urlencoder.encode(str, "utf-8"),這樣subString(0,512)是對的

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved