我在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());]
答案 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驱动程序抛出的错误异常。