yoni
[40][JDBC] 영화 정보 시스템, 등록, 목록, 조회, 수정, 삭제, MovieDAO.java 제작 ★ 본문
java of educational by contents
[40][JDBC] 영화 정보 시스템, 등록, 목록, 조회, 수정, 삭제, MovieDAO.java 제작 ★
yoni-1117 2018. 12. 15. 18:20[01] DBMS 입출력처리 기능의 제작
- 실행: java -cp %CLASSPATH%;C:/201810_java/mysql-connector.jar jdbc.MovieDAOUse
1. 등록(기초 코드를 참고하여 개발합니다.)
- Duplicate entry '1' for key 'PRIMARY'- 실행: java -cp %CLASSPATH%;C:/201810_java/mysql-connector.jar jdbc.MovieDAOUse
1. 등록(기초 코드를 참고하여 개발합니다.)
. PK(Primary Key) 컬럼인 newsno컬럼의 값이 중복되면 발생됨
- 각 라인마다 SQL문 앞에는 공백이 없으면 에러 남으로 공백을 1칸을 줍니다.
- SQL문 마지막에 ';'은 생략합니다.
- INSERT, UPDATE, DELETE SQL 실행 메소드는 처리된 레코드의 갯수를 리턴
count = pstmt.executeUpdate();
- SELECT 실행 메소드는 Record 집합 리턴
ResultSet rs = pstmt.executeQuery();
- Connection, PreparedStatement, ResultSet 객체는 자바와 DBMS 서버 연결이
불안정해짐으로 사용 종료시 즉시 메모리 해제를 하는 것을 권장합니다.
예)불안정해짐으로 사용 종료시 즉시 메모리 해제를 하는 것을 권장합니다.
}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){ }
}
처리 성공
▷ jdbc.MovieDAO.java, create() 메소드 제작
-------------------------------------------------------------------------------------
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
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 void create() {
try {
Class.forName(className); // 문자열로된 클래스명을 메모리에 상주, 객체 생성 안함.
con = DriverManager.getConnection(url, user, password); // DBMS에 연결
sql = new StringBuffer();
.....
.....
if (count == 1) {
System.out.println("등록 처리 성공");
} else {
System.out.println("등록 처리 실패");
}
} 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){ }
}
}
/**
* 등록
* @param title 영화명
* @param good 평점
* @param name 주연
*/
public void create(String title, double good, String name) {
try {
Class.forName(className); // 문자열로된 클래스명을 메모리에 상주, 객체 생성 안함.
con = DriverManager.getConnection(url, user, password); // DBMS에 연결
sql = new StringBuffer();
.....
if (count == 1) {
System.out.println("등록 처리 성공");
} else {
System.out.println("등록 처리 실패");
}
} 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){ }
}
}
}
->답
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MovieDAO {
Connection con = null; // DBMS 연결
PreparedStatement pstmt = null; // SQL 실행
ResultSet rs = null; // SELECT 결과를 저장
StringBuffer sql = null; // SQL 문장
int count = 0; // 처리된 레코드 갯수
//DB접속정보
//javadb는 데이터베이스이다.
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 void 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(" VALUES('인터스텔라(영화, 2014)', 10.0, '앤헤서웨이', now())");
pstmt = con.prepareStatement(sql.toString());//prepareStatement 이게 무슨함수냐
count = pstmt.executeUpdate();
if (count == 1) {
System.out.println("등록 처리 성공");
} else {
System.out.println("등록 처리 실패");
}
} 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){ }
}
}
/**
* 등록
* @param title 제목
* @param good 평점
* @param name 주연
*/
public void create(String title, double good, String name) {
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(" VALUES(?, ?, ?, now())");
pstmt = con.prepareStatement(sql.toString());//prepareStatement 이게 무슨함수냐
pstmt.setString(1, title);
pstmt.setDouble(2, good);
pstmt.setString(3, name);
count = pstmt.executeUpdate();
if (count == 1) {
System.out.println("등록 처리 성공");
} else {
System.out.println("등록 처리 실패");
}
} 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){ }
}
}
}
-------------------------------------------------------------------------------------
▷ jdbc.MovieDAOUse.java
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
package jdbc;
public class MovieDAOUse {
public static void main(String[] args) {
.....
}
}
->답
package jdbc;
public class MovieDAOUse {
public static void main(String[] args) {
MovieDAO movieDAO = new MovieDAO();
//movieDAO.create();
movieDAO.create("안시성", 10.0, "조인성");
}
}
2. 전체 레코드 목록 출력
- SELECT SQL 실행
- SELECT SQL 실행
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
[실행 화면]
- next(): 최초 호출시 첫번째 레코드로 이동,
다음 호출부터는 자동으로 다음 레코드로 이동하여
마지막 레코드까지 이동합니다.
따라서 next() 메소드의 연속 호출은 SELECT 결과의
모든 레코드를 출력 할 수 있습니다.
다음 호출부터는 자동으로 다음 레코드로 이동하여
마지막 레코드까지 이동합니다.
따라서 next() 메소드의 연속 호출은 SELECT 결과의
모든 레코드를 출력 할 수 있습니다.
[실행 화면]
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
───────────────────────────────
▷ jdbc.MovieDAO.java, create() 메소드를 복사하여 list() method 제작
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
public void list() {
try {
Class.forName(className); // 문자열로된 클래스명을 메모리에 상주, 객체 생성 안함.
con = DriverManager.getConnection(url, user, password); // DBMS에 연결
sql = new StringBuffer();
.....
} 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){ }
}
}
▷ jdbc.MovieDAOUse.java 변경
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
movieDAO.list();
3. 하나의 레코드 조회
[실행 화면]
1. 배틀스타 갤럭티카(미드, 2004): 제이미 밤버(9.9) 2018-08-28
───────────────────────────────
▷ jdbc.MovieDAO.java, list() 메소드를 복사하여 read() method 제작
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
/**
* 조회
* @param movieno 조회할 번호
*/
public void read(int movieno) {
try {
Class.forName(className); // 문자열로된 클래스명을 메모리에 상주, 객체 생성 안함.
con = DriverManager.getConnection(url, user, password); // DBMS에 연결
sql = new StringBuffer();
.....
} 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){ }
}
}
▷ jdbc.MovieDAOUse.java 변경
-------------------------------------------------------------------------------------
.....
-------------------------------------------------------------------------------------
.....
-------------------------------------------------------------------------------------
4. 레코드를 수정하는 소스
[실행 화면]
처리 성공
▷ jdbc.MovieDAO.java, create() 메소드를 복사하여 update() method 제작
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
/**
* 수정
* @param movieno 영화번호
* @param title 영화명
* @param good 평점
* @param name 주연
*/
public void update( ..... ) {
try {
Class.forName(className); // 문자열로된 클래스명을 메모리에 상주, 객체 생성 안함.
con = DriverManager.getConnection(url, user, password); // DBMS에 연결
sql = new StringBuffer();
.....
if (count == 1) {
System.out.println("수정 처리 성공");
} else {
System.out.println("수정 처리 실패");
}
} 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){ }
}
}
▷ jdbc.MovieDAOUse.java 변경
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
.....
5. 레코드를 삭제하는 소스
- int cnt = pstmt.executeUpdate();
▷ jdbc.MovieDAO.java, update() 메소드를 복사하여 delete() method 제작
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
/**
* 삭제
* @param movieno 영화번호
*/
public void delete(int movieno) {
try {
Class.forName(className); // 문자열로된 클래스명을 메모리에 상주, 객체 생성 안함.
con = DriverManager.getConnection(url, user, password); // DBMS에 연결
sql = new StringBuffer();
.....
if (count == 1) {
System.out.println("삭제 처리 성공");
} else {
System.out.println("삭제 처리 실패");
}
} 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){ }
}
}
▷ jdbc.MovieDAOUse.java 변경
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
.....
'java of educational by contents' 카테고리의 다른 글
Comments