처리 순서로 본 코딩

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);
	}

+ Recent posts