yoni
[43][JDBC] JCF, VO(DTO) 기반 영화 정보 시스템 제작 ★ 본문
java of educational by contents
[43][JDBC] JCF, VO(DTO) 기반 영화 정보 시스템 제작 ★
yoni-1117 2018. 12. 28. 11:07[01] JCF, VO(DTO) 기반 영화 정보 시스템 제작
- java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver
Eclipse는 MySQL 드라이버가 연동이되어있어 에러가 발생하지 않았으나,
콘솔(Dos)에서의 실행은 인식이안됨으로 Driver를 실행시 명시해야합니다.
- com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
MySQL Daemon(Service)을 시작하지 않았습니다. mysqld.exe 실행
- 실행: java -cp %CLASSPATH%;C:/201812_java/mysql-connector.jar jdbc2.MovieProcUse
Eclipse는 MySQL 드라이버가 연동이되어있어 에러가 발생하지 않았으나,
콘솔(Dos)에서의 실행은 인식이안됨으로 Driver를 실행시 명시해야합니다.
- com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
MySQL Daemon(Service)을 시작하지 않았습니다. mysqld.exe 실행
- 실행: java -cp %CLASSPATH%;C:/201812_java/mysql-connector.jar jdbc2.MovieProcUse
1. SQL
- 테이블명: movie
- 논리적 모델링 속성: 영화번호, 제목, 평점, 출연, 등록 날짜
- 물리적 모델링 컬럼: movieno(PK), title, good, name, rdate
- 목록
4. 커뮤터: 리암 니슨(7.9) 2018-08-29
───────────────────────────────
3. 러브 액츄얼리(2003): 휴 그랜트(10.0) 2018-08-28
───────────────────────────────
2. 인터스텔라(미드, 2014): 앤헤서웨이(10.0) 2018-08-28
───────────────────────────────
1. 배틀스타 갤럭티카(미드, 2004): 제이미 밤버(9.9) 2018-08-28
───────────────────────────────
.....
▷ /src/jdbc2/movie.sql
-------------------------------------------------------------------------------------
기존 파일 사용
-------------------------------------------------------------------------------------
2. VO(DTO)
- VO: Value Object, 값 객체
- DTO: Data Transfer Object, 데이터 전송 객체
- 테이블 컬럼을 변수로 선언, 테이블 컬럼이 아닌 변수도 선언 가능
- VO: Value Object, 값 객체
- DTO: Data Transfer Object, 데이터 전송 객체
- 테이블 컬럼을 변수로 선언, 테이블 컬럼이 아닌 변수도 선언 가능
▷ jdbc2.MovieVO.java
-------------------------------------------------------------------------------------
package jdbc2;
public class MovieVO {
/*
movieno INT NOT NULL AUTO_INCREMENT, -- 영화 번호
title VARCHAR(100) NOT NULL, -- 영화 제목(연도)
good FLOAT NOT NULL, -- 평점
name VARCHAR(30) NOT NULL,-- 출연
rdate DATETIME NOT NULL, -- 등록 날짜
*/
}
-------------------------------------------------------------------------------------
3. DAO▷ jdbc2.MovieDAO.java
-------------------------------------------------------------------------------------
package jdbc2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class MovieDAO {
Connection con = null; // DBMS 연결
PreparedStatement pstmt = null; // SQL 실행
ResultSet rs = null; // SELECT 결과를 저장
StringBuffer sql = null; // SQL 문장
int count = 0; // 처리된 레코드 갯수
String className = "org.gjt.mm.mysql.Driver"; // MySQL 연결 Drvier
String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr";
String user = "root";
String password = "1234";
/**
* 등록
*/
public int create( ..... ) {
try {
Class.forName(className); // 문자열로된 클래스명을 메모리에 상주, 객체 생성 안함.
con = DriverManager.getConnection(url, user, password); // DBMS에 연결
sql = new StringBuffer();
sql.append(" INSERT INTO movie(title, good, name, rdate)");
sql.append(" ");
pstmt = con.prepareStatement(sql.toString()); // SQL 실행 객체 생성
pstmt.setString(1, );
pstmt.setDouble(2, );
pstmt.setString(3, );
count = pstmt.executeUpdate(); // INSERT, UPDATE, DELETE SQL 실행
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try{
if (pstmt != null){ pstmt.close(); }
}catch(Exception e){ }
try{
if (con != null){ con.close(); }
}catch(Exception e){ }
}
return count;
}
public ArrayList<MovieVO> list() {
ArrayList<MovieVO> list = .....
try {
Class.forName(className); // 문자열로된 클래스명을 메모리에 상주, 객체 생성 안함.
con = DriverManager.getConnection(url, user, password); // DBMS에 연결
sql = new StringBuffer();
sql.append(" SELECT movieno, title, good, name, rdate");
sql.append(" FROM movie");
sql.append(" ORDER BY movieno DESC");
pstmt = con.prepareStatement(sql.toString()); // SQL 실행 객체 생성
rs = pstmt.executeQuery(); // SELECT
// true일 경우 순환, 레코드가 있는지 검사
// next() 최초 호출시는 첫번째 레코드로 이동
// next() 두번째 호출부터 다음 레코드로 이동하여 마지막 레코드까지 이동
while(rs.next()) {
.....
list.add(movieVO);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try{
if (rs != null){ rs.close(); }
}catch(Exception e){ }
try{
if (pstmt != null){ pstmt.close(); }
}catch(Exception e){ }
try{
if (con != null){ con.close(); }
}catch(Exception e){ }
}
return list;
}
/**
* 조회
* @param movieno 조회할 번호
*/
public MovieVO read(int movieno) {
MovieVO movieVO = null;
try {
Class.forName(className); // 문자열로된 클래스명을 메모리에 상주, 객체 생성 안함.
con = DriverManager.getConnection(url, user, password); // DBMS에 연결
sql = new StringBuffer();
sql.append(" SELECT movieno, title, good, name, rdate");
sql.append(" FROM movie");
sql.append(" ");
pstmt = con.prepareStatement(sql.toString()); // SQL 실행 객체 생성
pstmt.setInt(1, movieno);
rs = pstmt.executeQuery(); // SELECT
// true일 경우 실행, 레코드가 있는지 검사
// next() 최초 호출시는 첫번째 레코드로 이동
// next() 두번째 호출부터 다음 레코드로 이동하여 마지막 레코드까지 이동
if (rs.next()) {
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try{
if (rs != null){ rs.close(); }
}catch(Exception e){ }
try{
if (pstmt != null){ pstmt.close(); }
}catch(Exception e){ }
try{
if (con != null){ con.close(); }
}catch(Exception e){ }
}
return .....;
}
/**
* 수정
*/
public int update( ..... ) {
try {
Class.forName(className); // 문자열로된 클래스명을 메모리에 상주, 객체 생성 안함.
con = DriverManager.getConnection(url, user, password); // DBMS에 연결
sql = new StringBuffer();
sql.append(" UPDATE movie");
sql.append(" ");
sql.append(" ");
pstmt = con.prepareStatement(sql.toString()); // SQL 실행 객체 생성
pstmt.setString(1, );
pstmt.setDouble(2, );
pstmt.setString(3, );
pstmt.setInt(4, );
count = pstmt.executeUpdate(); // INSERT, UPDATE, DELETE SQL 실행
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try{
if (pstmt != null){ pstmt.close(); }
}catch(Exception e){ }
try{
if (con != null){ con.close(); }
}catch(Exception e){ }
}
return count;
}
/**
* 삭제
* @param movieno 영화번호
*/
public int delete(int movieno) {
try {
Class.forName(className); // 문자열로된 클래스명을 메모리에 상주, 객체 생성 안함.
con = DriverManager.getConnection(url, user, password); // DBMS에 연결
sql = new StringBuffer();
sql.append(" DELETE FROM movie");
sql.append(" ");
pstmt = con.prepareStatement(sql.toString()); // SQL 실행 객체 생성
pstmt.setInt(1, );
count = pstmt.executeUpdate(); // INSERT, UPDATE, DELETE SQL 실행
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try{
if (pstmt != null){ pstmt.close(); }
}catch(Exception e){ }
try{
if (con != null){ con.close(); }
}catch(Exception e){ }
}
return count;
}
}
-------------------------------------------------------------------------------------
4. Process
▷ jdbc2.MovieProc.java
-------------------------------------------------------------------------------------
package jdbc2;
import java.util.ArrayList;
import java.util.Scanner;
public class MovieProc {
MovieDAO movieDAO = null;
Scanner in = null;
public MovieProc() {
this.movieDAO = new MovieDAO();
this.in = new Scanner(System.in);
}
public void menu() {
int menu = 0; // 지역 변수
while(true) {
System.out.println();
System.out.println("Movie chart(ver 2.0)");
System.out.println("──────────");
System.out.println(" 1. 등록");
System.out.println(" 2. 목록");
System.out.println(" 3. 조회");
System.out.println(" 4. 수정");
System.out.println(" 5. 삭제");
System.out.println(" 9. 종료");
System.out.println("──────────");
System.out.print("메뉴 입력: ");
menu = Integer.parseInt(in.nextLine()); // 번호 입력
System.out.println();
if (menu == 1) {
create();
} else if (menu == 2) {
list();
} else if (menu == 3) {
read();
} else if (menu == 4) {
update();
} else if (menu == 5) {
delete();
} else if (menu == 9) {
System.out.println("즐거운 하루되세요~~");
System.exit(0);
}
}
}
public void create() {
// public void create(String title, double good, String name) {
String title = "";
double good = 0.0;
String name = "";
System.out.print("제목: " );
title = in.nextLine();
System.out.print("추천(0.0 ~ 10.0): ");
good = Double.parseDouble(in.nextLine());
System.out.print("주연: ");
name = in.nextLine();
.....
int count = this.movieDAO.create(.....);
if (count == 1) {
System.out.println("등록 처리 성공");
} else {
System.out.println("등록 처리 실패");
}
}
public void list() {
.....
int count = list.size();
for (int i=0; i < count; i++) {
.....
System.out.print(movieVO.getMovieno() + ". ");
System.out.print(movieVO.getTitle() + ": ");
System.out.print(movieVO.getName());
System.out.print("(" + movieVO.getGood() +") ");
System.out.print(movieVO.getRdate().substring(0, 10));
System.out.println();
System.out.println("───────────────────────────────");
}
}
public void read() {
System.out.print("조회할 번호: ");
int movieno = Integer.parseInt(in.nextLine());
.....
if (movieVO != null) {
System.out.print(movieVO.getMovieno() + ". ");
System.out.print(movieVO.getTitle() + ": ");
System.out.print(movieVO.getName());
System.out.print("(" + movieVO.getGood() +") ");
System.out.print(movieVO.getRdate().substring(0, 10));
System.out.println();
} else {
System.out.println("등록된 영화가 없습니다.");
}
}
public void update() {
int movieno = 0;
String title = "";
double good = 0.0;
String name = "";
System.out.print("영화번호: ");
movieno = Integer.parseInt(in.nextLine());
System.out.print("제목: " );
title = in.nextLine();
System.out.print("추천(0.0 ~ 10.0): ");
good = Double.parseDouble(in.nextLine());
System.out.print("주연: ");
name = in.nextLine();
.....
int count = .....
if (count == 1) {
System.out.println("수정 처리 성공");
} else {
System.out.println("수정 처리 실패");
}
}
public void delete() {
int movieno = 0;
System.out.print("삭제할 영화번호: ");
movieno = Integer.parseInt(in.nextLine());
int count = this.movieDAO.delete(movieno);
if (count == 1) {
System.out.println("삭제 처리 성공");
} else {
System.out.println("삭제 처리 실패");
}
}
}
-------------------------------------------------------------------------------------
5. DAO 사용
▷ jdbc2.MovieProcUse.java
-------------------------------------------------------------------------------------
package jdbc2;
public class MovieProcUse {
public static void main(String[] args) {
.....
}
}
-------------------------------------------------------------------------------------
'java of educational by contents' 카테고리의 다른 글
[45] jar Java application 배포 및 실행 (0) | 2018.12.28 |
---|---|
[44][JDBC] JDBC Connection의 분리, enum 타입의 사용 (0) | 2018.12.28 |
[42][OOP] JCF(Java Collection Framework: ArrayList, HashMap), Generics, JCF의 활용 (0) | 2018.12.28 |
[참고] Java + MyBATIS 3.4.1 + MySQL 5.6의 연동 및 JAR 배포 (0) | 2018.12.16 |
[40][JDBC] 영화 정보 시스템, 등록, 목록, 조회, 수정, 삭제, MovieDAO.java 제작 ★ (0) | 2018.12.15 |
Comments