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

我在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

发现数据库exception

很抱歉给您带来不便

exception详细信息:com.microsoft.sqlserver.jdbc.SQLServerException:索引2超出范围。 细节:

指数2超出范围。

堆栈跟踪:

com.microsoft.sqlserver.jdbc.SQLServerException:索引2超出范围。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:700)at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue (SQLServerPreparedStatement.java:709)位于javax的RegUser.doPost(RegUser.java:13)的DBOps.addUser(DBOps.java:55)的com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setString(SQLServerPreparedStatement.java:1034) .servlet.http.HttpServlet.service(HttpServlet.java:641)位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:30)的javax.servlet.http.HttpServlet.service(HttpServlet.java:722) )org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)org.apache.catalina.core.StandardContextValve。在org.apache中调用(StandardContextValve.java:164)。 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)at org.apache.coyote.http11.Http11AprProtocol $ Http11ConnectionHandler.process(Http11AprProtocol.java:272)at at org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run(AprEndpoint.java:1730)at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(Unknown Source)at java.util.concurrent.ThreadPoolExecutor $ Worker.run java.lang.Thread.run上的(未知来源)(未知来源)

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

username是nvarchar(MAX)类型。

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

与您的问题没有直接关系,但如果在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!”之后缺少单引号)

所以在我的情况下exception是SQL驱动程序抛出的错误exception。