Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 리소스를 자동으로 닫는 방법은 무엇입니까?

<시간/>

JDBC에서 try-with-resources를 사용하여 리소스를 자동으로 닫을 수 있습니다.

구문

try(리소스 선언){ body.....} catch (SQLException e) { e.printStackTrace();}

try에서 선언된 하나 이상의 리소스가 있는 try 문입니다. 여기서 리소스는 더 이상 필요하지 않으면 닫아야 하는 개체입니다.

여기에 여러 리소스를 선언할 수 있으며 모든 리소스는 명령문의 끝에서 자동으로 닫힙니다.

여기서 선언하는 객체/리소스는 java.lang.AutoCloseable 또는 java.io.Closeable 인터페이스를 구현하거나 java.lang.AutoCloseable을 확장해야 합니다. 수업.

JDBC에서는 java.sql.CallableStatement, Connection, PreparedStatement, Statement, ResultSet 및 RowSet를 사용할 수 있습니다. 리소스로 시도 성명서.

예시

아래와 같이 CREATE 문을 사용하여 MySQL 데이터베이스에 MyPlayers라는 이름의 테이블을 생성해 보겠습니다. -

CREATE TABLE MyPlayers( ID INT, First_Name VARCHAR(255), Last_Name VARCHAR(255), Date_Of_Birth 날짜, Place_Of_Birth VARCHAR(255), 국가 VARCHAR(255), PRIMARY KEY(ID));

이제 INSERT 문을 사용하여 MyPlayers 테이블에 7개의 레코드를 삽입합니다 -

MyPlayers 값에 삽입(1, 'Shikhar', 'Dhawan', DATE('1981-12-05'), 'Delhi', 'India');MyPlayers 값에 삽입(2, 'Jonathan', ' Trott', DATE('1981-04-22'), 'CapeTown', 'SouthAfrica');Insert into MyPlayers 값(3, 'Kumara', 'Sangakkara', DATE('1977-10-27'), ' Matale', 'Srilanka');MyPlayers 값에 삽입(4, 'Virat', 'Kohli', DATE('1988-11-05'), 'Delhi', 'India');MyPlayers 값에 삽입(5, 'Rohit', 'Sharma', DATE('1987-04-30'), 'Nagpur', 'India');MyPlayers 값에 삽입(6, 'Ravindra', 'Jadeja', DATE('1988-12- 06'), 'Nagpur', 'India');MyPlayers 값에 삽입(7, 'James', 'Anderson', DATE('1982-06-30'), 'Burnley', 'England'); 

다음 JDBC 프로그램은 JDBC에서 try-with-resources 문을 사용하는 방법을 보여줍니다 -

가져오기 java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class TryWithResources_Example { public static void main(String args[ ]) { //연결 문자열 얻기 mysqlUrl ="jdbc:mysql://localhost/mydatabase"; System.out.println("연결이 설정되었습니다......"); //드라이버 등록 try(Connection con =DriverManager.getConnection(mysqlUrl, "root", "password"); Statement stmt =con.createStatement(); ) { try(ResultSet rs =stmt.executeQuery("select * from MyPlayers ");) { //데이터 조회 while(rs.next()) { System.out.print(rs.getInt("ID")+", "); System.out.print(rs.getString("이름")+", "); System.out.print(rs.getString("성")+", "); System.out.print(rs.getDate("Date_Of_Birth")+", "); System.out.print(rs.getString("Place_Of_Birth")+", "); System.out.print(rs.getString("국가")); System.out.println(); } } catch(SQLException e) { e.printStackTrace(); } } catch(SQLException e) { e.printStackTrace(); } }}

출력

연결 설정.......1, Shikhar, Dhawan, 1981-12-05, Delhi, India2, Jonathan, Trott, 1981-04-22, CapeTown, SouthAfrica3, Kumara, Sangakkara, 1977-10-27 , Matale, Srilanka4, Virat, Kohli, 1988-11-05, 뭄바이, India5, Rohit, Sharma, 1987-04-30, Nagpur, India6, Ravindra, Jadeja, 1988-12-06, Nagpur, India7, James, Anderson , 1982-06-30, Burnely, England8, Ryan, McLaren, 1983-02-09, Kumberly, null