com.microsoft.sqlserver.jdbc.SQLServerException: индекс 2 находится вне диапазона :( - PullRequest
3 голосов
/ 18 марта 2012

У меня следующий код в 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) в DBOps.addUser (DBOps.java:55) в RegUser.doPost (RegUser.java:13) в javax.servlet.http.HttpServlet.service (HttpServlet.java:641) в javax.servlet.http.HttpServlet.service (HttpServlet.java:722) в 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).

Все вроде нормально, но я все еще получаю это исключение, почему ?? [Строка 55 в stacktrace - это строка ps.setString (2, newUp.getUsrName ());]

1 Ответ

0 голосов
/ 07 апреля 2016

Не имеет прямого отношения к вашей проблеме, но возможно получить эту ошибку, если вы пропустите одну кавычку где-нибудь при использовании XQuery в SQL. У меня было это со следующим 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...