String ab = (String)application.getAttribute("usn");

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
Connection ct = DriverManager.getConnection
("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=das","sa","mao");
Statement sm = ct.createStatement();
//ResultSet rs = sm.executeQuery("select youId from yonghu where name='"+u+"'");
ResultSet win = sm.executeQuery("select win from yonghu where name='"+ab+"'");
ResultSet lose = sm.executeQuery("select lose from yonghu where name='"+ab+"'");
win.next();
lose.next();
out.print(win.getInt(1) + lose.getInt(1));
程序到win.next();这里 报错。。
说是
javax.servlet.ServletException: com.microsoft.sqlserver.jdbc.SQLServerException: 结果集已关闭。
为什么  我只想把转换下!!!

解决方案 »

  1.   

    一个Statment对应一个ResultSet所以你再开一个lose的ResultSet的时候,之前的结果集自动关闭了
      

  2.   

    首先顶一楼,你想重用的话就把它们封装起来吧
    package com.bjsxt.bbs;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;public class DB {
    public static Connection getConn() {
    Connection conn = null;
    try {
    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bbs", "root" , "123456");
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return conn;
    }

    public static Statement createStmt(Connection conn) {
    Statement stmt = null;
    try {
    stmt = conn.createStatement();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return stmt;
    }

    public static ResultSet executeQuery(Statement stmt, String sql) {
    ResultSet rs = null;
    try {
    rs = stmt.executeQuery(sql);
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return rs;
    }

    /*public static ResultSet executeQuery(Connection conn, String sql) {
    Statement stmt = null;
    ResultSet rs = null;
    try {
    stmt = conn.createStatement();
    rs = stmt.executeQuery(sql);
    } catch (SQLException e) {
    e.printStackTrace();
    }

    // finally {
    // close(stmt);
    // }


    return rs;
    }*/

    public static int executeUpdate(Connection conn, String sql) {
    int ret = 0;
    Statement stmt = null;
    try {
    stmt = conn.createStatement();
    ret = stmt.executeUpdate(sql);
    } catch (SQLException e) {
    e.printStackTrace();
    } finally {
    close(stmt);
    }
    return ret;
    }

    public static PreparedStatement prepareStmt(Connection conn, String sql) {
    PreparedStatement pstmt = null;
    try {
    pstmt = conn.prepareStatement(sql);
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return pstmt;
    }

    public static PreparedStatement prepareStmt(Connection conn, String sql, int autoGeneratedKeys) {
    PreparedStatement pstmt = null;
    try {
    pstmt = conn.prepareStatement(sql, autoGeneratedKeys);
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return pstmt;
    }

    public static void close(Connection conn) {
    if(conn != null) {
    try {
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    conn = null;
    }
    }

    public static void close(Statement stmt) {
    if(stmt != null) {
    try {
    stmt.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    stmt = null;
    }
    }

    public static void close(ResultSet rs) {
    if(rs != null) {
    try {
    rs.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    rs = null;
    }
    }
    }