对数据查询时出现异常信息 无法转换为内部表示
(2012-09-20 01:20:08)
标签:
娱乐
对数据查询时出现异常信息:"无法转换为内部表示"时的一点处理思路.
异常堆栈:
[INFO ] 2008-11-20 19:05:22,859
METHOD:org.hibernate.type.NullableType.nullSafeGet(NullableType.java:132)
could not read column value from result set: id4_; 无法转换为内部表示
[WARN ] 2008-11-20 19:05:22,859
METHOD:org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:71)
SQL Error: 17059, SQLState: null
[ERROR] 2008-11-20 19:05:22,859
METHOD:org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:72)
无法转换为内部表示
[ERROR] 2008-11-20 19:05:22,859
METHOD:com.mobile.webserver.service.impl.WebServerService.doTrade(WebServerService.java:81)
org.hibernate.exception.GenericJDBCException: could not execute
query
[ERROR] 2008-11-20 19:05:22,859
METHOD:com.mobile.webserver.service.impl.WebServerService.doTrade(WebServerService.java:82)
StackTrace Info: ========>
org.hibernate.exception.GenericJDBCException: could not execute
query
at
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2148)
at
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at
org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at
org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at
com.mobile.data.dao.impl.TInvoiceInfoDAOImpl.getInvoiceInfo(TInvoiceInfoDAOImpl.java:65)
at
com.mobile.data.service.ServiceManager.getInvoiceInfo(ServiceManager.java:91)
at
com.mobile.webserver.service.util.BusinessManager.invoiceProcess(BusinessManager.java:88)
at
com.mobile.webserver.service.util.BusinessManager.packJson(BusinessManager.java:336)
at
com.mobile.webserver.service.impl.WebServerService.PackDataToJson(WebServerService.java:113)
at
com.mobile.webserver.service.impl.WebServerService.doTrade(WebServerService.java:54)
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:585)
at
org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
at
org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
at
org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
at
org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
at
org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
at
org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at
org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.SQLException: 无法转换为内部表示
at
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
// 注意下面这4行代码.
at
oracle.jdbc.driver.OracleStatement.getLongValue(OracleStatement.java:4367)
at
oracle.jdbc.driver.OracleResultSetImpl.getLong(OracleResultSetImpl.java:529)
at
oracle.jdbc.driver.OracleResultSet.getLong(OracleResultSet.java:1540)
at org.hibernate.type.LongType.get(LongType.java:28)
at
org.hibernate.type.NullableType.nullSafeGet(NullableType.java:113)
at
org.hibernate.type.NullableType.nullSafeGet(NullableType.java:102)
at
org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1088)
at
org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:554)
at org.hibernate.loader.Loader.doQuery(Loader.java:689)
at
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
... 40 more
我在处理该异常的方法是:
1.根据提示确定出现问题的数据类型.(过滤不必要的检查,减少花费在该问题上的时间。看懂异常是首要问题).
2.核对数据库字段类型与POJO类的字段数据类型是否匹配.
3.检查数据库字段内的value.
如:你的数据库字段类型为number,那么在手动映射POJO时可能你会把它写成int类型,这样本身是没有错的(在你数据库内的值没有超过
int的长度前).但是由于数据库的字段类型为number,那么在测试时,可能你会手动插入一些值.而值的长度超过int所能容纳的长度。那么在程序运行时对该字段进行get时就会出现上面的错误。这是其一。
4.其二,在查询数据时,有时为了避免在表示层进行多集合操作,往往我会选择在业务层中,把在两张表内的必要数据set到一个POJO类内。然后在表示层操作。在set到一个POJO类内的时候,为了通用get、set方法,会自实现一个Iterator,如:it.getString("字段名称")、getLong("字段名称");等诸如词类的方式。
那么,这个方式的get方法,在语法上由于它是只关心“字段名称”是否匹配,它不关心“字段类型”是否匹配(但,实际上是与之相反)。往往会在不留意间就会把数据库内的字段类型与该类内的get方法类型弄错。导致出先上面的异常。
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。