解决方案 »

  1.   

    1.在操作完数据库关闭,比如执行了executeUpdate或者遍历完结果集,就是说用完之后,就完毕,从外到内一次关闭。
    2.你不声明一个ResultSet对象去接收结果集的话,拿什么遍历?
    3.还有很多地方可以优化,比如加载驱动放在静态块,通过PreparedStatement做动态参数赋值,还少一个update的方法。想封装一个比较好的DAO需要大量的工作经验和编码功底,说实话这个DAO差的挺远,连事务的代码都没封装根本不能用。
      

  2.   

    bean里面只是声明这些方法或者属性,并没有调用
    就比如,我会抽烟,但是目前我没有抽烟,等我点烟然后开始吸烟,才要处理
      

  3.   

    1、使用完不用了就关闭了,一般放在finally方法中
    2、你的Bean中声明了ResultSet但并没有遍历ResultSet,你是把它交给了其他地方遍历
    3、Class.forName(driverName);放在静态代码块中,只需加载一次就可以了,你的getConnection()方法会返回null,但你使用时并没有判断返回的connection是否为null,另外你的资源关闭方法也没有放在finally方法中,这种连接模版网上有很多示例,你可以参考参考
      

  4.   


    static{  Class.forName(driverName);
    }
     public Connection getConnection(){  //创建数据库连接
            try{
              
               con=DriverManager.getConnection(url,userName,password);
              return con;
            }catch(Exception e){
                System.out.print("连接数据库失败"+e.getMessage());
                throw new RuntimeException(e);
            }
        }
        public ResultSet getResult(String sql){  //查询数据库
            try{
               // con=DriverManager.getConnection(url,userName,password);  //这一行不可少
           if(conn==null){
                conn=getConnection();
           }
                st=con.createStatement();//最好使用PreparedStatement
                rs=st.executeQuery(sql);
                 
            }catch(Exception e1){
                System.out.print("无法把查询发送至数据库并获得结果"+e1.getMessage());
            }
            return rs;
        }
    你的代码就可以做上面的一些改动,当然还有比如说你可以将某些属性放在Properties文件中,然后动态读取呀,这些就不说了,网上太多了。
    你说的关闭的问题:当某个对象你不想要在使用的时候,你就把它关闭掉,说的不是很准确。我举个例子哈:
    rs,conn,st你都使用完毕了,那么就把它关闭,你不要调用了conn.close()后再去使用rs.getString()等方法,那么那个时候就会报空指针异常了,一般是在你不想在操作数据库的时候就关闭连接。希望对你有所帮助
      

  5.   

    在JSP页面里,rs为什么还得重新ResultSet一下,在Bean里已经声明了
    java中对象的声明包括一个对象变量 以及它指向的堆对象的地址引用,即对象的初始化
    Statement st;
    ResultSet rs; 
    仅声明了对象变量,并没有将它们指向到具体的对象引用,也就是它们还没有初始化,还不能使用,所以在jsp页面上先初始化,然后使用之。
      

  6.   

    你可以将关闭的方法定义在Bean类中
                                  public static void closeAll(Statement stmt,PreparedStatement pstmt,ResultSet rs){
    try {
    if (rs != null) {
    rs.close();
    }
    if (pstmt != null) {
    pstmt.close();
    }
    if (stmt != null) {
    stmt.close();
    }
    if (conn != null) {
    conn.close();
    } } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } }
    执行完操作后可一次性关闭。