jsp通过JavaBean访问数据库,  只能向数据库里面插入数据,  查询数据的时候  ResultSet rs=executeQuery(sql);
 if(rs.next())      却不能读出数据,  而且是抛出异常   经过调试发现是因为用了  rs.next()  才出错的     高手们帮帮忙,  是怎么回事啊?????????????

解决方案 »

  1.   

    try{这里写上你的那个if(rs.next())      }catch(Exception ex)
    {System.out.print(ex);
    }
      

  2.   

    System.out.println();
    这样多调试下!!!
      

  3.   

    if(rs.next())要捕捉一下异常, 只能向数据库里面插入数据,不太明白当中的原因, 有没有代码?
      

  4.   

    看看你的rs是不是已经关闭了
    最好在加个try..catch..捕捉下异常
    多打印些语句
    在把你的sql语句打印出来
    我都是这么调试的 
      

  5.   

    这一块的代码是这样的:                          String sql="select * from YHGL_TABLE where USER_NAME='"+name+"'and USER_PSW='"+psw+"'";

    ResultSet rs=(ResultSet)db.executeQuery(sql);
                               if(rs.next())
    {   
    String priority=rs.getString("user_priority");
    session.setAttribute("username", name);
    session.setAttribute("userpsw", psw);
    session.setAttribute("userid", rs.getString("user_id"));
    session.setAttribute("userpriority", priority);
    response.sendRedirect("list.jsp");
    }
    else
    {
    session.setAttribute("error", "2");
    response.sendRedirect("error.jsp");
    }
    }
    catch(Exception e)
    {
    session.setAttribute("error", "3");
    response.sendRedirect("error.jsp");
    e.printStackTrace();
    }
    正常情况:如果rs.next()为空的话   应该是执行else语句啊     但是它却是抛出异常的  所以我觉得是rs.next()出了问题,  请高手指正
      

  6.   

    try
    {
    String sql="select * from YHGL_TABLE where USER_NAME='"+name+"'and USER_PSW='"+psw+"'";

    ResultSet rs=(ResultSet)db.executeQuery(sql);

    if(rs.next())
    {   
    String priority=rs.getString("user_priority");
    session.setAttribute("username", name);
    session.setAttribute("userpsw", psw);
    session.setAttribute("userid", rs.getString("user_id"));
    session.setAttribute("userpriority", priority);
    response.sendRedirect("list.jsp");
    }
    else
    {
    session.setAttribute("error", "2");
    response.sendRedirect("error.jsp");
    }
    }
    catch(Exception e)
    {
    //session.setAttribute("error", "3");
    response.sendRedirect("error.jsp");
    e.printStackTrace();
    }
    }
    上面忘了些代码   不好意思
      

  7.   

    最好在上面先定义好ResultSet rs =null;
    rs=(ResultSet)db.executeQuery(sql); 
    if(rs.next()即使是null也不会报错
      

  8.   


    错误:  description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:395)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      

  9.   

    你的功能是不是实现,检查用户名和密码是否正确,正确返回一个页面,不正确返回到error页面。
    如果是的话,你的代码是有问题的。
    if(rs.next){
    }else{}用这个来判断?这当然不正确了。
    把你的查询代码贴出来 看看。
    这里面,你要明确整个流程
    name,pwd从页面获得的吧。看你代码里,可是没有的哦。
    String name = request.getParameter("name");
    从页面中取得name的值,然后和你数据库中的进行对比,用这个来判断if(){}else{}
      

  10.   

    为了便于讨论  我还是把全部代码贴出来了    谢谢帮忙看下:
    <%@page language="java"  contentType="text/html; charset=gb2312" import="java.sql.*"%>
    <jsp:useBean id="db" class="yhgl.connectDB"/>
    <%
    String name= request.getParameter("username");
    String psw= request.getParameter("password");
    if(name==null|| psw==null||name.equals("")||psw.equals(""))
    {
    session.setAttribute("error", "1");
    response.sendRedirect("error.jsp");
    }
    else
    {
    try
    {
    ResultSet rs=null;    String sql="select * from YHGL_TABLE where USER_NAME='"+"xiangjiao"+"'and USER_PSW='"+"235011"+"'";

     rs=(ResultSet)db.executeQuery(sql);
     
    if(rs.next())
    {   
    String priority=rs.getString("user_priority");
    session.setAttribute("username", name);
    session.setAttribute("userpsw", psw);
    session.setAttribute("userid", rs.getString("user_id"));
    session.setAttribute("userpriority", priority);
    response.sendRedirect("list.jsp");
    }
    else
    {   
    session.setAttribute("error", "2");
    response.sendRedirect("error.jsp");
    }
    }
    catch(Exception e)
    {
    session.setAttribute("error", "3");
    response.sendRedirect("error.jsp");
    e.printStackTrace();
    }
    }
    %>正常情况:如果rs.next()为空的话  应该是执行else语句啊    但是它却是抛出异常的  所以我觉得是rs.next()出了问题,  请高手指正
      

  11.   

    不管什么情况    只要执行到rs.next()得时候,   就会抛出异常的     真的无语了
      

  12.   

    rs=(ResultSet)db.executeQuery(sql)有没有问题..检查一下你是不是导入的java.sql....包
      

  13.   

    导入了java.sql.*包的啊       <%@page language="java"  contentType="text/html; charset=gb2312" import="java.sql.*"%> 
      

  14.   

    发生数据库访问错误,我觉得是这句话出的问题:
    (ResultSet)db.executeQuery(sql)
    你应该检查下
    <jsp:useBean id="db" class="yhgl.connectDB"/> 里面是不是有问题了。
    单纯的rs。next应该不会有问题
      

  15.   

    对呀,我也估计是connectDB出的问题
      

  16.   


    package yhgl;
    import java.sql.*;
    public class connectDB
    {
    String DBDriver="oracle.jdbc.driver.OracleDriver";
    String DBUrl="jdbc:oracle:thin:@localhost:1521:oracle";
    String DBUser="linqin";
    String DBPsw="235011";
    Connection conn=null;
    PreparedStatement stmt=null;
    public connectDB()
    {
    try
    {
    Class.forName(DBDriver);
    conn=DriverManager.getConnection(DBUrl, DBUser, DBPsw);
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    public ResultSet executeQuery(String sql) throws Exception
    {
    try
    {
    this.stmt=null;
    this.stmt=conn.prepareStatement(sql);
    return this.stmt.executeQuery();
    }
    catch(SQLException e)
    {
    e.printStackTrace();
    return null;
    }
    }
    public int executeUpdate(String sql) throws Exception
    {
    try
    {
    this.stmt=null;
    this.stmt=conn.prepareStatement(sql);
    return this.stmt.executeUpdate();
    }
    catch(SQLException e)
    {
    e.printStackTrace();
    return 0;
    }
    }
    public void closeDB()
    {
    try
    {
    conn.close();
    stmt.close();
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    }
      

  17.   

    who can help me!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  18.   

    把全部异常信息都贴出来 后面应该有一个root canuse
      

  19.   

    public class DBCon {
    private static Connection conn; private static Statement stat; private static ResultSet rs;
    // mysql连接
    public DBCon() {
    PreparedStatement stmt=null; 
    String driver = "oracle.jdbc.driver.OracleDriver";
    String url = "jdbc:oracle:thin:@localhost:1521:oracle";
    String user = "linqin";
    String password = "235011";
    try {
    Class.forName(driver);
    conn = DriverManager.getConnection(url, user, password);
    System.out.println("连接成功");
    } catch (ClassNotFoundException e) {
    e.getMessage();
    e.printStackTrace();
    } catch (SQLException e) {
    e.getMessage();
    e.printStackTrace();
    }
    } //根据sql查询得到结果集
    public ResultSet select(String sql) {
    try {
    rs = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE).executeQuery(sql);
    } catch (SQLException e) {
    e.getMessage();
    e.printStackTrace();
    }
    return rs;
    } //根据sql查询条件判断是否存在
    public boolean selectDb(String sql){
    boolean boo = false;
    try {
    rs = conn.createStatement().executeQuery(sql);
    boo=rs.next();
    } catch (SQLException e) {
    e.getMessage();
    e.printStackTrace();
    }
    return boo;
    } //修改或删除数据
    public int update(String sql) throws SQLException {
    int rs = conn.createStatement().executeUpdate(sql);
    return rs;
    } //插入数据
    public boolean insert(String sql) throws SQLException {
    stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
    ResultSet.CONCUR_UPDATABLE);
    try {
    stat.executeUpdate(sql);
    } catch (Exception e) {
    e.getMessage();
    e.printStackTrace();
    }
    return true;
    } //关闭
    public void close() {
    try {
    if (rs != null)
    rs.close();
    if (stat != null)
    stat.close();
    if (conn != null)
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    public static void main(String args[])
    {
    DBCon db=new DBCon();
    }}直接用这个。
    查询时调用select
      

  20.   

    <%@page language="java"  contentType="text/html; charset=gb2312" import="java.sql.*"%>
    <jsp:useBean id="db" class="yhgl.connectDB"/>
    <%
    String name= request.getParameter("username");
    String psw= request.getParameter("password");
    if(name==null|| psw==null||name.equals("")||psw.equals(""))
    {
    session.setAttribute("error", "1");
    response.sendRedirect("error.jsp");
    }
    else
    {
    String sql =  String sql="select * from YHGL_TABLE where USER_NAME='"+"xiangjiao"+"'and USER_PSW='"+"235011"+"'";
    ResultSet rs = con.select(sql);
    try {
    while(rs.next()){
    String priority=rs.getString("user_priority");
                                    session.setAttribute("username", name);
                                    session.setAttribute("userpsw", psw);
                                    session.setAttribute("userid", rs.getString("user_id"));
                                    session.setAttribute("userpriority", priority);
                                    response.sendRedirect("list.jsp");
    }
    } catch (SQLException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
    %> 
      

  21.   

    在执行next()之前,先判断一下rs是否为空?若不为空,再读一下rs的记录数,试试看吧
      

  22.   

    正如我上面说的,你的功能要是想实现,登陆的话,说实在的,你这样写,效果不是很好。我看你转了几个页面,不知道为什么。
    验证user,pwd如果和数据库中一致,就跳转一个页面,不一致就跳转到error页面就可以了。
      

  23.   

    经过验证,你的程序虽然写得不是很好,但是没有发生你所讲的错误~~~检查一下你的Oracle的驱动有没有引入你的程序中,写了一个测试方法给你,你自己运行下,看看运行检查下错误:
    public void testQuery1(){

    try{
    ConnectDB db = new ConnectDB();
    ResultSet rs=null;    String sql="select * from YHGL_TABLE where USER_NAME='"+"xiangjiao"+"'and USER_PSW='"+"235011"+"'";  rs=(ResultSet)db.executeQuery(sql);  if(rs.next()) 
    {  
    String priority=rs.getString("USER_NAME"); 
    System.out.println(priority);


    else 
    {  
      System.out.println("--------error-------");


    catch(Exception e) 

     
    e.printStackTrace(); 
    }  }
     在我的机上你的程序没有出错~~~
      

  24.   

    rs.next()出错,既然有人说你代码正常了。应该就是你驱动的问题了。换个驱动包试下
      

  25.   

    错误终于找出来了,  原来是在数据库中建表的时候把USER_PSW  错写成了  RSER_PSW  了,  而在jsp中却一直用的是USER_PSW    ,  实在是太粗心了。   谢谢各位的热心帮助~~~~~~~~
      

  26.   

    楼主不够仔细啊,楼上都有人说了,打印sql语句进行调试。继续努力。