【发布时间】:2012-03-18 14:56:37
【问题描述】:
我在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) 类型。
一切似乎都很好,但我仍然收到此异常,为什么? [stacktrace 中的第 55 行是 ps.setString(2,newUp.getUsrName());]
【问题讨论】:
-
usrid 是 char(6) n 所有其他都是 nvarchar(max) 在数据库中,但在 java 类文件中它们是字符串。但是 usrid 与用户名没有关系。它在用户名中给出错误。
-
你用什么值作为用户名???
-
检查
getUsrName()的结果是否为NULL。 -
@tvanfosson:是的,我查过了,它不为空......
-
我认为在数据库中您声明了字段的长度,在这里您输入的数据长度超过了该数据长度
标签: java sql-server exception