hc学习平台

 找回密码
 立即注册
搜索
热搜: 活动 交友 javakc
 › 学习交流 › 项目难点 › 不想手动关闭系统资源的解决办法
查看: 1435|回复: 0
打印 上一主题 下一主题

不想手动关闭系统资源的解决办法

[复制链接]

6

主题

0

帖子

0

博客

gaotm

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

跳转到指定楼层
楼主
发表于2019-01-02 14:11:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


不想手动关闭系统资源的解决办法

    使用JDBC对表访问,无论是增删改查哪一种操作,连接Connection对象都是必须的,对于查的操作,除了Connection,还需要StatementResultSet对象,功能结束后,三者都需要释放这些系统资源,不然就会出现系统资源泄露的情况;

    

    Java中系统资源主要有以下四类;

1、 键盘资源;

2、 IO资源;

3、 SQL资源;

4、 Socket资源;

JDK7中,提供了一个统一的AutoCloseable接口,让以上四类对象分别实现,统一调用close方法以达到释放的目的;

package com.javakc.dao.entity;

import java.io.Serializable;

import java.math.BigDecimal;

public final class Dept implements Serializable {

    private static final long serialVersionUID = -766315495546623555L;

    private String dname;

    private BigDecimal deptno;

    private String loc;

    public final String getDname() {

       return dname;

    }

    public final void setDname(String dname) {

       this.dname = dname;

    }

    public final BigDecimal getDeptno() {

       return deptno;

    }

    public final void setDeptno(BigDecimal deptno) {

       this.deptno = deptno;

    }

    public final String getLoc() {

       return loc;

    }

    public final void setLoc(String loc) {

       this.loc = loc;

    }

    @Override

    public String toString() {

       return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";

    }

}

   对应的表;

    如果要完成一个独立的获取表的功能,让表中的所有记录转换为一个类实例的List;可以使用try-with-resources技术完成,在代码块中会自动释放系统资源,而不须程序员手动完成; 示例:访问scott用户中的dept表,转换为List

    访问代码;

package com.javakc.book.one;

import java.io.IOException;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.javakc.dao.entity.Dept;

import com.javakc.gaoming.jdbc.utils.Jdbc;

@WebServlet("/bb.do")

public class BbServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       this.doPost(request, response);

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       List depts = new ArrayList<>();

       try (Connection conn = Jdbc.getConnection("aaa", "aaa");

              PreparedStatement stmt = conn.prepareStatement("select * from dept");

              ResultSet rs = stmt.executeQuery();) {

           while (rs.next()) {

              Dept dept = new Dept();

              dept.setDeptno(rs.getBigDecimal("deptno"));

              dept.setDname(rs.getString("dname"));

              dept.setLoc(rs.getString("loc"));

              depts.add(dept);

           }

       } catch (SQLException e) {

           e.printStackTrace();

       }

       for (Dept dept : depts) {

           response.getWriter().write(dept + "
");

       }

    }

}

    得到List后,再进行后续处理.....




站点统计|举报|Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, , Processed in 0.195171 second(s), 9 queries .

Powered by javakc! X1.0

© 2004-2014 javakc

f1208.com 备案号:京ICP备14030918号-1

返回顶部