[Java강의노트] Step by step으로 본 JDBC를 이용한 프로그래밍
2009. 9. 18. 15:41
처리 순서로 본 코딩
package net.jeongsam.testsuit; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * JDBC 이용 코드 v1 * @author 정샘 * */ public class JdbcCodeEx01 { public void delete(long articleNo) throws ClassNotFoundException, SQLException { // Driver 클래스 로딩 Class.forName("com.mysql.jdbc.Driver"); // Connection 인스턴스 생성 - DBMS에 연결 String url = "jdbc:mysql://127.0.0.1:3306/example"; // 사용할 Database 지정 String user = "root"; // 로그인 사용자 String password = "1234"; // 암호 Connection conn = DriverManager.getConnection(url, user, password); // 실행할 SQL문 작성 : 삭제할 번호는 매개변수 articleNo에서 가져옴. String sql = "DELETE FROM board_data WHERE no = " + articleNo; // Statement 인스턴스 생성 : Connection 객체에서 만들어 짐. Statement stmt = conn.createStatement(); // SQL문 실행 : Statement 객체를 이용 // INSERT, DELETE, UPDATE문은 executeUpdate() 사용 // SELECT문은 executeQuery() 사용 stmt.executeUpdate(sql); // Statement 객체를 close 시켜서 자원 반납 (운영체제에게 JVM이 반납) stmt.close(); // Statement 객체를 가비지 컬렉션 대상으로 만듬 (JVM에게 자원 반납) stmt = null; // Connection 객체를 close 시켜서 자원 반납 (운영체제에게 JVM이 반납) // DBMS에 연결하기 위해 운영체제는 Socket 등 자원을 사용. JVM에게 대여. conn.close(); // Connection 객체를 가비지 컬렉션 대상으로 만듬 (JVM에게 자원 반납) conn = null; /* 작업 종료 */ } }
중복코드를 정리한 코딩
package net.jeongsam.begin; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class JdbcCodeEx02 { public void delete(long articleNo) throws ClassNotFoundException, SQLException { /* 메서드내에서 사용할 지역변수의 선언 */ Connection conn = null; Statement stmt = null; // 실행할 SQL문 작성 : 삭제할 번호는 매개변수 articleNo에서 가져옴. String sql = "DELETE FROM board_data WHERE no = " + articleNo; try { conn = getConnection(); // Statement 인스턴스 생성 : Connection 객체에서 만들어 짐. stmt = conn.createStatement(); // SQL문 실행 : Statement 객체를 이용 // INSERT, DELETE, UPDATE문은 executeUpdate() 사용 // SELECT문은 executeQuery() 사용 stmt.executeUpdate(sql); } finally { if (stmt != null) { // Statement 객체가 존재할 경우만 close()가 의미있음 // Statement 객체를 close 시켜서 자원 반납 (운영체제에게 JVM이 반납) stmt.close(); // Statement 객체를 가비지 컬렉션 대상으로 만듬 (JVM에게 자원 반납) stmt = null; } if (conn != null) { // Connection 객체가 존재할 경우만 close()가 의미있음 // Connection 객체를 close 시켜서 자원 반납 (운영체제에게 JVM이 반납) // DBMS에 연결하기 위해 운영체제는 Socket 등 자원을 사용. JVM에게 대여. conn.close(); // Connection 객체를 가비지 컬렉션 대상으로 만듬 (JVM에게 자원 반납) conn = null; } } /* 작업 종료 */ } /** * Connection 인스턴스 생성(DB 연결) 부분은 모든 메서드에서 공통으로 사용하므로 * 중복 코드를 별도의 메서드로 분리합니다. * @return Connection 인스턴스를 리턴 * @throws ClassNotFoundException JDBC 드라이버 로딩 오류 * @throws SQLException DB 연결 오류 */ private Connection getConnection() throws ClassNotFoundException, SQLException { String url = "jdbc:mysql://127.0.0.1:3306/example"; // 사용할 Database 지정 String user = "root"; // 로그인 사용자 String password = "1234"; // 암호 // Driver 클래스 로딩 Class.forName("com.mysql.jdbc.Driver"); // Connection 인스턴스 생성 - DBMS에 연결 return DriverManager.getConnection(url, user, password); } }
Properties 클래스를 이용한 getConnection() 재 작성
/** * Connection 인스턴스 생성(DB 연결) 부분은 모든 메서드에서 공통으로 사용하므로 * 중복 코드를 별도의 메서드로 분리합니다. * @return Connection 인스턴스를 리턴 * @throws ClassNotFoundException JDBC 드라이버 로딩 오류 * @throws SQLException DB 연결 오류 * @throws IOException 프로퍼티스 정보 저장 파일 로딩 오류 */ private Connection getConnection() throws ClassNotFoundException, SQLException, IOException { String url = "jdbc:mysql://127.0.0.1:3306/example"; // 사용할 Database 지정 BufferedReader reader = null; Properties prop = new Properties(); // Driver 클래스 로딩 Class.forName("com.mysql.jdbc.Driver"); // Connection 인스턴스 생성 - DBMS에 연결 // mysecret.txt 파일에 다음과 같은 형식으로 저장합니다. // user=root // password=1234 reader = new BufferedReader(new FileReader("C:\\mysecret.txt")); prop.load(reader); return DriverManager.getConnection(url, prop); }