처리 순서로 본 코딩
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);
}

