java.sql.SQLException: ORA-01722: 无效数字

java.sql.SQLException:ORA-01722:无效数字atoracle.jdbc.driver.DatabaseError.throwSqlExcept... java.sql.SQLException: ORA-01722: 无效数字

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:330)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:287)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:742)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:212)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:951)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1159)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3284)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3367)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
at com.db.DbOperation.executeUpdate(DbOperation.java:31)
at com.dao.UserDaoImpl.insertObject(UserDaoImpl.java:36)
at com.servlet.UserServlet.immlogin(UserServlet.java:96)
at com.servlet.UserServlet.doPost(UserServlet.java:46)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
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.Http11AprProcessor.process(Http11AprProcessor.java:864)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665)
at java.lang.Thread.run(Thread.java:619)

在jsp注册页面 输入数字没问题,输入字母就报这个错,什么原因??
展开
 我来答
羅朔妮l
推荐于2017-09-29 · TA获得超过120个赞
知道答主
回答量:93
采纳率:100%
帮助的人:56万
展开全部
一个查询 select to_number(c.name) as srvtype, value as typename from sys_code c where c.srvclass=9 --srvclass为字符型
一直工作得很好,但突然一天返回错误ORA-01722 invalid number。由于条件srvclass字段是varchar2类型,就想当然地以为是ORACLE的bug(恰巧上周刚确认了ORACLE的一个查询bug),将条件改写成c.srvclass='9'后,查询就又能运行了。

事情虽然过去了,可总觉得有点不对劲。首先ORACLE不可能出现这么简单的BUG;其次就算是BUG,返回的错误提示也不应嫌闭该是 invalid number。按理说,即使ORACLE不能自动完成类型转换滑塌而要求写成 srvclass='9',那么对srvclass=9这种写法的错误提示也应该是invalid character。但由于直觉作怪,也就没有深究

正好space6212提出了他对bug解释的疑问,我就从头进行检查,才发现错误的根本原因是:ORACLE将where c.srvclass=9解释为where to_number(c.srvclass)=9
1)以前执行SQL时,ORACLE进行全表扫描,对每行的srvclass都转换为number型进行比较.以前表中的srvclass的取值只有字符0到9,所以没有出错;
2)后来表中加入了新数据,srvclass的取值都是字母串,ORACLE进行全表扫描时,对新行上srvclass的to_number转换当然就返回ORA-01722 invalid number了。信者圆
百度网友e367531c3
2011-08-09 · TA获得超过518个赞
知道小有建树答主
回答量:720
采纳率:0%
帮助的人:452万
展开全部
检查一下你的数据库里对应表的字段是数字类型还是字符串类型的。
追问
该number就number,该varchar2就varchar2,没问头啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xuxin_2010
2011-08-10
知道答主
回答量:7
采纳率:0%
帮助的人:1.2万
展开全部
可能是你的数据库字段设置成了数值型,,,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a327297867
2011-08-10 · TA获得超过128个赞
知道小有建树答主
回答量:190
采纳率:0%
帮助的人:99.5万
展开全部
你的类型不对..... 它应该是varchar 类型的..建议数据库中修改成varchar
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
q87691116
2011-08-11
知道答主
回答量:66
采纳率:0%
帮助的人:30.5万
展开全部
sql 语句有问题啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式