2012-03-18 22 views
3

我有以下代碼在Javacom.microsoft.sqlserver.jdbc.SQLServerException:索引2是超出範圍:(

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.S QLServerException: 索引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)at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)at org.apache.catalina。 core.Ap plicationFilterChain.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) at 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(Unknown Source)at java.lang.Thread。運行(未知來源)

在數據庫我有4列usrid, username, password, email

用戶名是nvarchar(MAX)類型。

一切似乎都很好,但我仍然得到這個異常,爲什麼? [stacktrace中的第55行是ps.setString(2,newUp.getUsrName());]

+0

usrid is String也是?? – 2012-03-18 15:00:55

+0

usrid是char(6)n其他所有的數據庫都是nvarchar(max),但在java類文件中它們是String。但usrid與用戶名無關。它在用戶名中給出錯誤。 – 2012-03-18 15:07:24

+0

你使用什麼值用戶名? – 2012-03-18 15:20:37

回答

0

與您的問題沒有直接關係,但如果在使用時錯過某個單引號時可能會出現此錯誤SQL中的XQuery。我有這個用下面的SQL:(! 「HELLO WORLD」 單引號與後失蹤)

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=? 

所以在我的情況下的例外是SQL驅動程序拋出的錯誤異常。