본문 바로가기
JAVA

[Java / MySQL] 도서 관리 시스템 01 (MVC패턴)

by 알기 쉬운 코딩 사전 2023. 1. 13.
반응형

 

1장에서는 패키지를 생성하고 MySQL에서 테이블을 생성 이클립스와 MySQL을 연결하는 커넥터를 만들고 데이터가 잘 출력되는지를 확인해 보는 단계까지 환경 설정 후 소스코드 작성을 해보겠습니다.

 

이클립스를 실행한 후 새로운 프로젝트를 생성합니다.

 

book.controller, book.dao, book.view, book.vo 총 4개의 패키지를 생성합니다.

 

MVC 패턴이란?

모델 뷰 컨트롤러의 소스 코드를 각각 분리해서 유지 보수나 버그에 유연하게 대처하기 위한 
프로그래밍 디자인 패턴입니다.

 

book.dao 패키지에 JDBC_Connector이라는 클래스를 main 생성 체크 후 생성합니다. 

 

MySQL 워크 벤치를 실행 후, 스키마 book_db를 생성합니다.

 

칼럼명과 데이터 타입을 설정 후 적용을 눌러줍니다.

isbn 데이터는 도서 관리 번호 데이터입니다.
name은 도서명 데이터입니다.
publish는 출판사입니다.
author은 작가/저자입니다.
price은 도서 가격입니다.
category는 도서 분류 번호입니다.

 

mysql connector jar 파일을 이클립스에 추가해 줍니다.

프로젝트 우 클릭 후 properties를 클릭한 후,

add external jars...를 클릭해 주고 mysql connector jar 파일의 경로로 들어가서 파일을 추가해 줍니다.

 

이제 환경 설정은 거의 되었으니 소스코드 작성을 합니다.

 

Connection 접속이 가능한 변수를 설정해 줍니다.

package book.dao;

import java.sql.Connection;

public class JDBC_Connector {
	
	private static final String DRIVER_PATH = "com.mysql.cj.jdbc.Driver";
	private static final String URL = "jdbc:mysql://127.0.0.1:3306/book_db?serverTimezone=UTC&useUnicode=yes&characterEncoding=UTF-8";
	private static final String ID = "root";
	private static final String PWD = "1234";
	
	private static Connection con;

	public static void main(String[] args) {
		

	}

}

 

Connection 객체를 이용하려면 MySQL의 URL, ID, PASSWORD가 필요합니다.
초기에 설정한 비밀번호를 입력해 주세요.

 

getCon 메소드를 생성합니다.

package book.dao;

import java.sql.Connection;
import java.sql.DriverManager;

public class JDBC_Connector {
	
	private static final String DRIVER_PATH = "com.mysql.cj.jdbc.Driver";
	private static final String URL = "jdbc:mysql://127.0.0.1:3306/book_db?serverTimezone=UTC&useUnicode=yes&characterEncoding=UTF-8";
	private static final String ID = "root";
	private static final String PWD = "1234";
	
	private static Connection con;
	
	private static Connection getCon() {
		//1번 과정
		Class.forName(DRIVER_PATH);
		System.out.println("정상적으로 JDBC Driver가 로드되었습니다.");
		
		//2번 과정
		con = DriverManager.getConnection(URL, ID, PWD);
		System.out.println("정상 연결이 되었습니다.");
	}

	public static void main(String[] args) {
		

	}

}
getConn 메소드는 JDBC가 정상적으로 연결이 되었나를 확인해 보기 위한 메소드입니다.

 

커넥션 설정을 할 때 예외처리문이 필수로 작성됩니다.

빨간 줄에 마우스를 올려둔 다음에 Surround with try/catch를 눌러줍니다.

 

예외처리문 작성

package book.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBC_Connector {
	
	private static final String DRIVER_PATH = "com.mysql.cj.jdbc.Driver";
	private static final String URL = "jdbc:mysql://127.0.0.1:3306/book_db?serverTimezone=UTC&useUnicode=yes&characterEncoding=UTF-8";
	private static final String ID = "root";
	private static final String PWD = "1234";
	
	private static Connection con;
	
	private static Connection getCon() {
		try {
			Class.forName(DRIVER_PATH);
			System.out.println("정상적으로 JDBC Driver가 로드되었습니다.");
			con = DriverManager.getConnection(URL, ID, PWD);
			System.out.println("정상 연결이 되었습니다.");
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		catch (SQLException e) {
			e.printStackTrace();
		}
		
		return con;
	}

	public static void main(String[] args) {
		

	}

}

 

JDBC가 정상적으로 연결되었나 확인을 해봅니다.

MySQL 워크 벤치를 통하여 book_db 테이블에 데이터를 삽입해 줍니다.

resultSetTest() 메소드 작성

package book.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBC_Connector {
	
	private static final String DRIVER_PATH = "com.mysql.cj.jdbc.Driver";
	private static final String URL = "jdbc:mysql://127.0.0.1:3306/book_db?serverTimezone=UTC&useUnicode=yes&characterEncoding=UTF-8";
	private static final String ID = "root";
	private static final String PWD = "1234";
	
	private static Connection con;
	
	public static Connection getCon() {
		try {
			Class.forName(DRIVER_PATH);
			System.out.println("정상적으로 JDBC Driver가 로드되었습니다.");
			con = DriverManager.getConnection(URL, ID, PWD);
			System.out.println("정상 연결이 되었습니다.");
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		catch (SQLException e) {
			e.printStackTrace();
		}
		
		return con;
	}
	
	public static void resultSetTest() {
		Statement stmt = con.createStatement();
		String sql = "select * from book";
		ResultSet rs = stmt.executeQuery(sql);
		while(rs.next()) {
			System.out.print(rs.getString("name")+" ");
			System.out.print(rs.getString("author")+" ");
			System.out.println(rs.getString("price")+" ");
		}
		rs.close();
		stmt.close();
	}

	public static void main(String[] args) {
		getCon();
	}

}
resultSetTest() 메소드는 데이터의 결과를 테스트해 보기 위한 메소드입니다.

 

예외처리문 작성

package book.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBC_Connector {
	
	private static final String DRIVER_PATH = "com.mysql.cj.jdbc.Driver";
	private static final String URL = "jdbc:mysql://127.0.0.1:3306/book_db?serverTimezone=UTC&useUnicode=yes&characterEncoding=UTF-8";
	private static final String ID = "root";
	private static final String PWD = "1234";
	
	private static Connection con;
	
	public static Connection getCon() {
		try {
			Class.forName(DRIVER_PATH);
			System.out.println("정상적으로 JDBC Driver가 로드되었습니다.");
			con = DriverManager.getConnection(URL, ID, PWD);
			System.out.println("정상 연결이 되었습니다.");
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		catch (SQLException e) {
			e.printStackTrace();
		}
		
		return con;
	}
	
	public static void resultSetTest() {
		Statement stmt;
		try {
			stmt = con.createStatement();
			String sql = "select * from book";
			ResultSet rs = stmt.executeQuery(sql);
			while(rs.next()) {
				System.out.print(rs.getString("name")+" ");
				System.out.print(rs.getString("author")+" ");
				System.out.println(rs.getString("price")+" ");
			}
			rs.close();
			stmt.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	public static void main(String[] args) {
		getCon();
		resultSetTest();
	}

}

 

정상적으로 데이터가 출력되는지 실행을 시켜 확인해 봅니다.

 

 

JDBC_Connector 소스 코드입니다.

package book.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBC_Connector {
	
	private static final String DRIVER_PATH = "com.mysql.cj.jdbc.Driver";
	private static final String URL = "jdbc:mysql://127.0.0.1:3306/book_db?serverTimezone=UTC&useUnicode=yes&characterEncoding=UTF-8";
	private static final String ID = "root";
	private static final String PWD = "1234";
	
	private static Connection con;
	
	public static Connection getCon() {
		try {
			Class.forName(DRIVER_PATH);
			System.out.println("정상적으로 JDBC Driver가 로드되었습니다.");
			con = DriverManager.getConnection(URL, ID, PWD);
			System.out.println("정상 연결이 되었습니다.");
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		catch (SQLException e) {
			e.printStackTrace();
		}
		
		return con;
	}
	
	public static void resultSetTest() {
		Statement stmt;
		try {
			stmt = con.createStatement();
			String sql = "select * from book";
			ResultSet rs = stmt.executeQuery(sql);
			while(rs.next()) {
				System.out.print(rs.getString("name")+" ");
				System.out.print(rs.getString("author")+" ");
				System.out.println(rs.getString("price")+" ");
			}
			rs.close();
			stmt.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	public static void main(String[] args) {
		getCon();
		resultSetTest();
	}

}

 

궁금한 점이 있으면 덧글 주시면 최대한 답글 드리겠습니다.

감사합니다.

반응형

댓글