javax.servlet.ServletException: com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.check_jsp._jspService(check_jsp.java:121)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

解决方案 »

  1.   

    源代码:<%!
    public static final String DBDRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    public static final String DBURL = "jdbc:sqlserver://localhost:1433; DatabaseName=e_onlineroom";
    public static final String DBUSER = "sa" ;
    public static final String DBPASS = "sa" ;
    %>
    <%  
    Connection conn = null ;
    PreparedStatement pstmt = null ;
    ResultSet rs = null ;
    boolean flag = false ;
    %><%

    String username = request.getParameter("username") ;
    String password = request.getParameter("password") ;
    Class.forName(DBDRIVER) ;
    conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
    String sql = "SELECT * FROM user WHERE username='"+username+"' AND password='"+password+"'";
    pstmt = conn.prepareStatement(sql) ;
    pstmt.setString(1,username);
    pstmt.setString(2,password);
    rs = pstmt.executeQuery(); 
    if(rs.next()){
    flag = true ;
    }

    conn.close() ;
    //}catch(Exception e){}
    %>
      

  2.   

    javax.servlet.ServletException: com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。
     应该是你输入的值超出了你数据库设置的长度
    将你的sql语句在数据库试试
      

  3.   

    看你user表中username的字段长度,再看看楼主username这个参数的长度。
      

  4.   

    SELECT * FROM user WHERE username='"+username+"' AND password='"+password+"',这句应该使用预编译写法select * from user where username=? and password=?,这样在下面才可以使用pstmt.setString(1,username);
    pstmt.setString(2,password);
      

  5.   

    按四楼的做法改了,又出现了新错误:
    javax.servlet.ServletException: com.microsoft.sqlserver.jdbc.SQLServerException: 关键字 'user' 附近有语法错误。
      

  6.   

    问题解决了,四楼的方法是正确的!user是sql的关键字,所以出现语法错误,换一个名就好了,谢谢各位大侠!