oracle无法转换为内部表,对数据查询时出现异常信息 无法转换为内部表示

对数据查询时出现异常信息 无法转换为内部表示

(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方法类型弄错。导致出先上面的异常。

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值