JDBC 프로그래밍 문제


이전 예제 goodsInfo를 활용해서 키보드로 입력받은 값으로 

입력, 수정, 삭제, 조회가 되도록 프로그램을 작성하시오.


조회 : 전체 상품 조회 SELECT

수정 : 코드 선택, 상품명과 가격을 변경 UPDATE

삭제 : 코드 선택, DELETE

입력 : 키보드로 코드, 상품, 가격, 메이커 입력 받아서 INSERT


1. 클래스를 4개 만들어서 따로 동작시키도록 하거나, 

2. 클래스를 하나로 하는 경우 4개를 메소드 단위로 분리할 것.



1. 클래스를 4개 만들어서 따로 동작시키는 경우


1) 실행 프로그램

각 메뉴별로 해당 클래스의 객체 생성 후, 객체.해당 클래스의 해당 메소드명으로 실행하면 된다.


package JDBC프로그래밍;

import java.util.*;

public class JdbcTest01 {


public static void main(String args[]) {

Scanner scan = new Scanner(System.in);

int cmdNo = 0;


while (true) {

System.out.println("");

System.out.println("원하는 메뉴를 선택하십시오.");

System.out.println("1.조회 2.수정 3.삭제 4.입력 5.종료");

cmdNo = scan.nextInt();


if (cmdNo == 1) {

Jdbc_Select select = new Jdbc_Select(); // 조회 클래스의 객체 생성

select.selectMethod(); // 조회 클래스의 조회 메소드 실행

}

else if (cmdNo == 2) {

Jdbc_Update update = new Jdbc_Update(); // 수정 클래스 객체 생성

update.updateMethod(); // 수정 클래스의 수정 메소드 실행

}

else if (cmdNo == 3) {

Jdbc_Delete delete = new Jdbc_Delete(); // 삭제 클래스 객체 생성

delete.deleteMethod(); // 삭제 클래스의 삭제 메소드 실행

}

else if (cmdNo == 4) {

Jdbc_Insert insert = new Jdbc_Insert(); // 입력 클래스 객체 생성

insert.insertMethod(); // 입력 클래스의 입력 메소드 실행

}

else {

scan.close();

break;

}

}

}

}


------------------------------------


2) 조회 클래스 (SELECT)


package JDBC프로그래밍;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

public class Jdbc_Select {

public void selectMethod() {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@211.183.9.66:1521:xe";
String sql = "SELECT * FROM GOODSINFO";
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName(driver);
con = DriverManager.getConnection(url, "st02", "st02");
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery(); 
while (rs.next()) {
String code = rs.getString("CODE"); 
String name = rs.getString("NAME"); 
int price = rs.getInt("PRICE");
String maker = rs.getString("MAKER");
System.out.println(code + "\t" + name + "\t" + price + "\t" + maker);
}
}
catch (Exception e) {System.out.println(e.getMessage());}
finally {
try {rs.close();
pstmt.close();
con.close();
} catch (Exception e) {}
}
}
}
------------------------------------


3) 수정 클래스 (UPDATE)


package JDBC프로그래밍;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.util.*;

public class Jdbc_Update {


public void updateMethod() {

Scanner scan = new Scanner(System.in);

String driver = "oracle.jdbc.driver.OracleDriver";

String url = "jdbc:oracle:thin:@211.183.9.66:1521:xe";

String sql = "UPDATE GOODSINFO SET NAME = ?, PRICE = ? WHERE CODE = ?";

Connection con = null;

PreparedStatement pstmt = null;

try {

Class.forName(driver);

con = DriverManager.getConnection(url, "st02", "st02");

pstmt = con.prepareStatement(sql);

System.out.printf("수정할 코드 입력: ");

String code = scan.next();

System.out.printf("수정할 상품명 입력: ");

String name = scan.next();

System.out.printf("수정할 가격 입력: ");

int price = scan.nextInt();

pstmt.setString(1, name);

pstmt.setInt(2, price);

pstmt.setString(3, code);

int cnt = pstmt.executeUpdate(); 

System.out.println(cnt + "건이 실행되었습니다.");

}

catch (Exception e) {System.out.println(e.getMessage());}

finally {

try {

pstmt.close();

con.close();

} catch (Exception e) {

}

}

}

}


------------------------------------


4) 삭제 클래스 (DELETE)


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.util.*;

public class Jdbc_Delete {


public void deleteMethod() {

Scanner scan = new Scanner(System.in);

String driver = "oracle.jdbc.driver.OracleDriver";

String url = "jdbc:oracle:thin:@211.183.9.66:1521:xe";

String sql = "DELETE FROM GOODSINFO WHERE CODE = ?";

String code = "";

Connection con = null;

PreparedStatement pstmt = null;

try {

Class.forName(driver);

con = DriverManager.getConnection(url, "st02", "st02");

pstmt = con.prepareStatement(sql);

System.out.println("삭제할 코드를 입력하시오");

code = scan.next();

pstmt.setString(1, code);

int cnt = pstmt.executeUpdate(); 

System.out.println(cnt);

}

catch (Exception e) {System.out.println(e.getMessage());}

finally {

try {

pstmt.close();

con.close();

} catch (Exception e) {

}

}

}

}


------------------------------------


5) 입력 클래스 (INSERT)


import java.sql.*

import java.util.*;

public class Jdbc_Insert {


public void insertMethod() {

Scanner scan = new Scanner(System.in);

String driver = "oracle.jdbc.driver.OracleDriver";

String url = "jdbc:oracle:thin:@211.183.9.66:1521:xe";

String sql = "INSERT INTO GOODSINFO(CODE,NAME,PRICE,MAKER) VALUES(?, ?, ?, ?)";

Connection con = null;

PreparedStatement pstmt = null;

try {

Class.forName(driver);

con = DriverManager.getConnection(url, "st02", "st02");

pstmt = con.prepareStatement(sql);

System.out.printf("입력할 코드: ");

String code = scan.next();

System.out.printf("입력할 상품명: ");

String name = scan.next();

System.out.printf("입력할 가격: ");

int price = scan.nextInt();

System.out.printf("입력할 메이커: ");

String maker = scan.next();

pstmt.setString(1, code);

pstmt.setString(2, name);

pstmt.setInt(3, price);

pstmt.setString(4, maker);

int cnt = pstmt.executeUpdate(); 

System.out.println(cnt + "건이 실행되었습니다.");

}

catch (Exception e) {System.out.println(e.getMessage());}

finally {

try {

pstmt.close();

con.close();

} catch (Exception e) {

}

}

}

}


※ 주의사항 : 각각의 클래스를 main으로 실행시켰을 때에는 finally에서 scan.close();를 해줬으나 
위와 같이 통합할 경우에는 scan.close();는 main 클래스에서만 실행시켜줘야 한다.

----------------------------------------------------------------------------------

5) 결과 : 메뉴에 따라 데이터베이스 조회, 수정, 삭제, 입력이 가능한 프로그램이 완성된다.


원하는 메뉴를 선택하십시오.
1.조회 2.수정 3.삭제 4.입력 5.종료
1
10002 플레이스테이션3 300000 LG
10003 디지털 카메라 210000 삼성
10004 컬러액정 전자사전 300000 아이리버
10005 벽걸이 에어컨 450000 삼성

원하는 메뉴를 선택하십시오.
1.조회 2.수정 3.삭제 4.입력 5.종료
4
입력할 코드: 10001
입력할 상품명: 플레이스테이션4
입력할 가격: 420000
입력할 메이커: 소니
1건이 실행되었습니다.

원하는 메뉴를 선택하십시오.
1.조회 2.수정 3.삭제 4.입력 5.종료
1
10001 플레이스테이션4 420000 소니
10002 플레이스테이션3 300000 LG
10003 디지털 카메라 210000 삼성
10004 컬러액정 전자사전 300000 아이리버
10005 벽걸이 에어컨 450000 삼성

원하는 메뉴를 선택하십시오.
1.조회 2.수정 3.삭제 4.입력 5.종료


----------------------------------------------------------------------------------


2. 클래스 하나에 4개의 메소드를 만들어서 동작시키는 경우


1) 실행 프로그램

각 메뉴별로 해당 클래스의 객체 생성 후, 객체.해당 클래스의 해당 메소드 실행하면 된다.


import java.util.*;

public class JdbcTest02 {


public static void main(String args[]) {

Scanner scan = new Scanner(System.in);

int cmdNo = 0;


while (true) {

System.out.println("");

System.out.println("원하는 메뉴를 선택하십시오.");

System.out.println("1.조회 2.수정 3.삭제 4.입력 5.종료");

cmdNo = scan.nextInt();


if (cmdNo == 1) {

JdbcTest02Method select = new JdbcTest02Method(); // 메소드 클래스의 객체 생성

select.selectMethod(); // 메소드 클래스의 조회 메소드 실행

}

else if (cmdNo == 2) {

JdbcTest02Method update = new JdbcTest02Method();

update.updateMethod(); // 메소드 클래스의 수정 메소드 실행

}

else if (cmdNo == 3) {

JdbcTest02Method delete = new JdbcTest02Method();

delete.deleteMethod(); // 메소드 클래스의 삭제 메소드 실행

}

else if (cmdNo == 4) {

JdbcTest02Method insert = new JdbcTest02Method();

insert.insertMethod(); // 메소드 클래스의 입력 메소드 실행

}

else {

scan.close();

break;

}

}

}

}


--------------------------

2) 메소드 클래스

별도로 만들었던 조회, 수정, 삭제, 입력 4개의 클래스를 하나의 클래스에 4개의 메소드로 구분해서 담았다.


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.Scanner;


public class JdbcTest02Method {

Scanner scan = new Scanner(System.in);  // 각 메소드별 중복되는 항목 빼냄.

String driver = "oracle.jdbc.driver.OracleDriver"; 

String url = "jdbc:oracle:thin:@211.183.9.66:1521:xe";

public void selectMethod() {        // 조회 메소드 (SELECT)

String sql = "SELECT * FROM GOODSINFO";

Connection con = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

try {

Class.forName(driver);

con = DriverManager.getConnection(url, "st02", "st02");

pstmt = con.prepareStatement(sql);

rs = pstmt.executeQuery(); 

while (rs.next()) {

String code = rs.getString("CODE"); 

String name = rs.getString("NAME"); 

int price = rs.getInt("PRICE");

String maker = rs.getString("MAKER");

System.out.println(code + "\t" + name + "\t" + price + "\t" + maker);

}

}

catch (Exception e) {System.out.println(e.getMessage());}

finally {

try {rs.close();

pstmt.close();

con.close();

} catch (Exception e) {}

}

}

public void updateMethod() {      // 수정 메소드 (UPDATE)

String sql = "UPDATE GOODSINFO SET NAME = ?, PRICE = ? WHERE CODE = ?";

Connection con = null;

PreparedStatement pstmt = null;

try {

Class.forName(driver);

con = DriverManager.getConnection(url, "st02", "st02");

pstmt = con.prepareStatement(sql);

System.out.printf("수정할 코드 입력: ");

String code = scan.next();

System.out.printf("수정할 상품명 입력: ");

String name = scan.next();

System.out.printf("수정할 가격 입력: ");

int price = scan.nextInt();

pstmt.setString(1, name);

pstmt.setInt(2, price);

pstmt.setString(3, code);

int cnt = pstmt.executeUpdate(); 

System.out.println(cnt + "건이 실행되었습니다.");

}

catch (Exception e) {

System.out.println(e.getMessage());

}


finally {

try {

pstmt.close();

con.close();

} catch (Exception e) {

}

}

}

public void deleteMethod() {        // 삭제 메소드 (DELETE)

String sql = "DELETE FROM GOODSINFO WHERE CODE = ?";

String code = "";

Connection con = null;

PreparedStatement pstmt = null;

try {

Class.forName(driver);

con = DriverManager.getConnection(url, "st02", "st02");

pstmt = con.prepareStatement(sql);

System.out.println("삭제할 코드를 입력하시오");

code = scan.next();

pstmt.setString(1, code);

int cnt = pstmt.executeUpdate(); 

System.out.println(cnt);

}

catch (Exception e) {System.out.println(e.getMessage());}

finally {

try {

pstmt.close();

con.close();

} catch (Exception e) {

}

}

}


public void insertMethod() {         // 입력 메소드 (INSERT)

String sql = "INSERT INTO GOODSINFO(CODE,NAME,PRICE,MAKER) VALUES(?, ?, ?, ?)";

Connection con = null;

PreparedStatement pstmt = null;

try {

Class.forName(driver);

con = DriverManager.getConnection(url, "st02", "st02");

pstmt = con.prepareStatement(sql);

System.out.printf("입력할 코드: ");

String code = scan.next();

System.out.printf("입력할 상품명: ");

String name = scan.next();

System.out.printf("입력할 가격: ");

int price = scan.nextInt();

System.out.printf("입력할 메이커: ");

String maker = scan.next();

pstmt.setString(1, code);

pstmt.setString(2, name);

pstmt.setInt(3, price);

pstmt.setString(4, maker);

int cnt = pstmt.executeUpdate(); 

System.out.println(cnt + "건이 실행되었습니다.");

}

catch (Exception e) {

System.out.println(e.getMessage());

}


finally {

try {

pstmt.close();

con.close();

} catch (Exception e) {

}

}

}


}


-----------------------

3) 결과 : 메뉴에 따라 데이터베이스 조회, 수정, 삭제, 입력이 가능한 프로그램이 완성된다.


원하는 메뉴를 선택하십시오.

1.조회 2.수정 3.삭제 4.입력 5.종료

1

10001 플레이스테이션4 420000 소니

10002 플레이스테이션3 300000 LG

10003 디지털 카메라 210000 삼성

10004 컬러액정 전자사전 300000 아이리버

10005 벽걸이 에어컨 450000 삼성


원하는 메뉴를 선택하십시오.

1.조회 2.수정 3.삭제 4.입력 5.종료

2

수정할 코드 입력: 10002

수정할 상품명 입력: PS_Vita

수정할 가격 입력: 300000

1건이 실행되었습니다.


원하는 메뉴를 선택하십시오.

1.조회 2.수정 3.삭제 4.입력 5.종료

1

10001 플레이스테이션4 420000 소니

10002 PS_Vita 300000 LG

10003 디지털 카메라 210000 삼성

10004 컬러액정 전자사전 300000 아이리버

10005 벽걸이 에어컨 450000 삼성


원하는 메뉴를 선택하십시오.

1.조회 2.수정 3.삭제 4.입력 5.종료

3

삭제할 코드를 입력하시오

10002

1


원하는 메뉴를 선택하십시오.

1.조회 2.수정 3.삭제 4.입력 5.종료

1

10001 플레이스테이션4 420000 소니

10003 디지털 카메라 210000 삼성

10004 컬러액정 전자사전 300000 아이리버

10005 벽걸이 에어컨 450000 삼성


원하는 메뉴를 선택하십시오.

1.조회 2.수정 3.삭제 4.입력 5.종료

4

입력할 코드: 10002

입력할 상품명: 갤럭시노트10

입력할 가격: 1000000

입력할 메이커: 삼성

1건이 실행되었습니다.


원하는 메뉴를 선택하십시오.

1.조회 2.수정 3.삭제 4.입력 5.종료

1

10001 플레이스테이션4 420000 소니

10003 디지털 카메라 210000 삼성

10004 컬러액정 전자사전 300000 아이리버

10005 벽걸이 에어컨 450000 삼성

10002 갤럭시노트10 1000000 삼성


원하는 메뉴를 선택하십시오.

1.조회 2.수정 3.삭제 4.입력 5.종료

5



Posted by netyhobby
,