com.microsoft.sqlserver.jdbc.SQLServerException:索引2超出范围:(

时间:2012-03-18 14:56:38

标签: java sql-server exception

我在java中有以下代码

qry="insert into usr_auth(usrid,username,password,email) values(?,?,?,?)";
            ps=con.prepareStatement(qry);
            ps.setString(1,getUniqueID());
            ps.setString(2,newUp.getUsrName());
            ps.setString(3,newUp.getPwd());
            ps.setString(4,newUp.getEmail());
            ps.executeUpdate();

这段代码给了我一个IndexOutOfBoundsException

  

发布数据库异常

     

我们很抱歉给您带来不便

     

异常详细信息:com.microsoft.sqlserver.jdbc.SQLServerException:   指数2超出范围。详细说明:

     

指数2超出范围。

     

堆栈追踪:

     

com.microsoft.sqlserver.jdbc.SQLServerException:索引2不在   范围。在   com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)   在   com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:700)   在   com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue(SQLServerPreparedStatement.java:709)   在   com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setString(SQLServerPreparedStatement.java:1034)   在RegUser.doPost(RegUser.java:13)的DBOps.addUser(DBOps.java:55)处   javax.servlet.http.HttpServlet.service(HttpServlet.java:641)at at   javax.servlet.http.HttpServlet.service(HttpServlet.java:722)at at   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)   在   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)   在   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)   在   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)   在   org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)   在   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)   在   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)   在   org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)   在   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)   在   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)   在   org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:286)   在   org.apache.coyote.http11.Http11AprProtocol $ Http11ConnectionHandler.process(Http11AprProtocol.java:272)   在   org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run(AprEndpoint.java:1730)   在java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(未知   来自java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知   来自java.lang.Thread.run(未知来源)

在数据库中,我有4列usrid, username, password, email

用户名为nvarchar(MAX)类型。

一切似乎都很好但我仍然得到这个例外为什么? [stacktrace中的第55行是ps.setString行(2,newUp.getUsrName());]

1 个答案:

答案 0 :(得分:0)

与您的问题没有直接关系,但如果您在SQL中使用XQuery时错过了单引号,则可能会出现此错误。我使用以下SQL:

UPDATE TABLE SET CustomFields.modify('replace value of (/CustomFields/Field[@ID=1]/Value)[1] with "HELLO WORLD!") WHERE ID=?

需要

UPDATE TABLE SET CustomFields.modify('replace value of (/CustomFields/Field[@ID=1]/Value)[1] with "HELLO WORLD!"') WHERE ID=?

(以“HELLO WORLD!”之后遗漏的单引号)

因此,在我的情况下,异常是SQL驱动程序抛出的错误异常。