Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 집합_SET
- 자바
- 참조형변수
- 예외처리
- 메소드오버로딩
- 한국건설관리시스템
- 어윈 사용법
- cursor문
- 객체 비교
- 인터페이스
- abstract
- GRANT VIEW
- 생성자오버로드
- 예외미루기
- Java
- 추상메서드
- 대덕인재개발원
- 컬렉션 타입
- exception
- 자동차수리시스템
- 정수형타입
- 컬렉션프레임워크
- 다형성
- 제네릭
- NestedFor
- 사용자예외클래스생성
- 환경설정
- oracle
- EnhancedFor
- 오라클
Archives
- Today
- Total
거니의 velog
230915_JDBC 2 본문
[jdbcTest06_2.java]
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import kr.or.ddit.util.DBUtil;
/*
* 회원 관리를 하는 프로그램을 작성하시오.
* (MYMEMBER 테이블 이용)
*
* 아래의 메뉴를 구성하고 각 메뉴의 기능을 구현하시오. (CRUD 기능 구현하기)
* 메뉴예시)
* == 작업 선택 ==
* 1. 자료 추가 ==> Create (insert문)
* 2. 자료 삭제 ==> Delete (delete문)
* 3. 자료 수정 ==> Update (update문)
* 4. 전체 자료 출력 ==> Read (select문)
* 0. 작업 끝.
* ------------
*
* 조건)
* 1) 자료 추가에서 '회원ID'는 중복되지 않는다. (중복되면 다시 입력 받는다.)
* 2) 자료 삭제는 '회원ID'를 입력 받아서 처리한다.
* 3) 자료 수정에서 '회원ID'는 변경되지 않는다.
*
*/
public class jdbcTest06_2 {
private Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
new jdbcTest06_2().StartMember();
}
// 시작 메서드
public void StartMember() {
while(true) {
int choice = displayMenu();
switch(choice) {
case 1: // 추가
insertMember(); break;
case 2: // 삭제
deleteMember(); break;
case 3: // 수정 ==> 전체 항목 수정
updateMember(); break;
case 4: // 전체 출력
displayAllMember(); break;
case 5: // 수정2 ==> 원하는 항목 수정
updateMember2(); break;
case 0: // 작업 끝.
System.out.println();
System.out.println("작업을 마칩니다...");
return;
default:
System.out.println();
System.out.println("작업 번호를 잘못 입력했습니다.");
System.out.println("다시 입력하세요...");
}
}
}
// 회원 정보를 수정하는 메서드 ==> 원하는 항목만 수정
private void updateMember2() {
Connection conn = null;
PreparedStatement pstmt = null;
System.out.println();
System.out.println("수정할 회원 정보를 입력하세요...");
System.out.print("수정할 회원ID >> ");
String id = scan.nextLine();
if(getMemIdCount(id) == 0) {
System.out.println();
System.out.println(id + "은(는) 없는 회원ID 입니다...");
System.out.println("수정 작업을 마칩니다...");
System.out.println();
return;
}
// update mymember set mem_tel = '새로운 전화번호' where mem_id = '수정할 회원ID';
// update mymember set mem_name = '새로운 이름' where mem_id = '수정할 회원ID';
// ...
int num; // 수정 항목 선택 번호가 저장될 변수
String updateField = null; // 수정할 컬럼명이 저장될 변수
String updatetitle = null; // 수정할 데이터를 입력 받을 때 출력할 메시지
do {
System.out.println();
System.out.println("수정할 항목을 선택하세요...");
System.out.println("1. 비밀번호 2. 회원이름 3. 전화번호 4. 회원주소");
System.out.println("--------------------------------------------");
System.out.print("수정할 항목 선택 >> ");
num = scan.nextInt();
switch(num) {
case 1:
updateField = "mem_pass"; updatetitle = "비밀번호"; break;
case 2:
updateField = "mem_name"; updatetitle = "회원이름"; break;
case 3:
updateField = "mem_tel"; updatetitle = "전화번호"; break;
case 4:
updateField = "mem_addr"; updatetitle = "회원주소"; break;
default:
System.out.println();
System.out.println("수정할 항목을 잘못 선택했습니다.");
System.out.println("다시 선택하세요...");
System.out.println();
}
}while(num < 1 || num > 4);
scan.nextLine(); // 버퍼 비우기
System.out.println();
System.out.print("새로운 " + updatetitle + " >> ");
String updateData = scan.nextLine();
try {
conn = DBUtil.getConnection();
// String sql = " update mymember set ? = ? where ? = ? ";
// update mymember set 'mem_pass' = '3333' where 'mem_id' = '4444' ==> 컬럼명 자리가 String으로 바뀌면 에러 발생.
// pstmt.setString(1, "mem_pass");
// pstmt.setString(2, "3333");
// pstmt.setString(3, "mem_id");
// pstmt.setString(4, "4444");
// update mymember set mem_pass = '3333' where mem_id = '4444' ==> 이렇게 쿼리가 나와야 함.
String sql = " update mymember set " + updateField + " = ? where mem_id = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, updateData);
pstmt.setString(2, id);
int cnt = pstmt.executeUpdate();
if(cnt > 0) {
System.out.println();
System.out.println(id + " 회원 정보 수정 완료!!!");
System.out.println();
}else {
System.out.println();
System.out.println(id + " 회원 정보 수정 실패~~~");
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
// 회원 정보를 수정하는 메서드 ==> 전체 항목 수정
private void updateMember() {
Connection conn = null;
PreparedStatement pstmt = null;
System.out.println();
System.out.println("수정할 회원 정보를 입력하세요...");
System.out.print("수정할 회원ID >> ");
String id = scan.nextLine();
if(getMemIdCount(id) == 0) {
System.out.println();
System.out.println(id + "은(는) 없는 회원ID 입니다...");
System.out.println("수정 작업을 마칩니다...");
System.out.println();
return;
}
System.out.print("새로운 비밀번호 입력 >> ");
String newPass = scan.next();
System.out.print("새로운 회원이름 입력 >> ");
String newName = scan.next();
System.out.print("새로운 전화번호 입력 >> ");
String newTel = scan.next();
scan.nextLine(); // 버퍼 비우기
System.out.print("새로운 회원주소 입력 >> ");
String newAddr = scan.nextLine();
try {
conn = DBUtil.getConnection();
String sql = " update mymember set mem_pass = ?, mem_name = ?, "
+ " mem_tel = ?, mem_addr = ? where mem_id = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, newPass);
pstmt.setString(2, newName);
pstmt.setString(3, newTel);
pstmt.setString(4, newAddr);
pstmt.setString(5, id);
int cnt = pstmt.executeUpdate();
if(cnt > 0) {
System.out.println();
System.out.println(id + " 회원 정보 수정 완료!!!");
System.out.println();
}else {
System.out.println();
System.out.println(id + " 회원 정보 수정 실패~~~");
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
// 회원 정보를 삭제하는 메서드
private void deleteMember() {
Connection conn = null;
PreparedStatement pstmt = null;
System.out.println();
System.out.println("삭제할 회원 정보를 입력하세요...");
System.out.print("삭제할 회원ID >> ");
String id = scan.nextLine();
if(getMemIdCount(id) == 0) {
System.out.println();
System.out.println(id + "은(는) 없는 회원ID 입니다...");
System.out.println("삭제 작업을 마칩니다...");
System.out.println();
return;
}
try {
conn = DBUtil.getConnection();
String sql = " delete from mymember where mem_id = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
int cnt = pstmt.executeUpdate();
if(cnt > 0) {
System.out.println();
System.out.println(id + " 회원 정보 삭제 성공!!!");
System.out.println();
}else {
System.out.println();
System.out.println(id + " 회원 정보 삭제 실패~~~");
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
// 새로운 회원 정보를 추가하는 메서드
private void insertMember() {
Connection conn = null;
PreparedStatement pstmt = null;
System.out.println();
System.out.println("새롭게 추가할 회원 정보를 입력하세요...");
int count = 0;
String id = null; // 입력한 회원 ID가 저장될 변수
do {
System.out.print("회원 ID 입력 >> ");
id = scan.next();
scan.nextLine();
count = getMemIdCount(id);
if(count > 0) {
System.out.println(id + "은(는) 이미 등록된 회원ID 입니다.");
System.out.println("다른 회원ID를 입력하세요...");
System.out.println();
}
}while(count > 0);
System.out.print("비밀번호 입력 >> ");
String pass = scan.next();
System.out.print("회원이름 입력 >> ");
String name = scan.next();
System.out.print("전화번호 입력 >> ");
String tel = scan.next();
scan.nextLine(); // 버퍼 비우기
System.out.print("주 소 입력 >> ");
String addr = scan.nextLine();
try {
conn = DBUtil.getConnection();
String sql = " insert into mymember (mem_id, mem_pass, mem_name, mem_tel, mem_addr) ";
sql += " values(?, ?, ?, ?, ?) ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, pass);
pstmt.setString(3, name);
pstmt.setString(4, tel);
pstmt.setString(5, addr);
int cnt = pstmt.executeUpdate();
if(cnt > 0) {
System.out.println();
System.out.println(id + "회원 정보 추가 완료!!!");
System.out.println();
}else {
System.out.println();
System.out.println(id + "회원 정보 추가 실패~~~");
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
// 회원ID를 매개변수로 받아서 해당 회원ID의 개수를 반환하는 메서드
private int getMemIdCount(String memId) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int count = 0; // 검색한 회원ID의 개수가 저장될 변수
try {
conn = DBUtil.getConnection();
String sql = " select count(*) as cnt from mymember where mem_id = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memId);
rs = pstmt.executeQuery();
if(rs.next()) {
count = rs.getInt("cnt");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(rs != null) try { rs.close(); } catch (SQLException e) {}
if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
return count;
}
// 전체 회원 정보를 출력하는 메서드
private void displayAllMember() {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
System.out.println();
System.out.println("-----------------------------------------");
System.out.println(" ID\t 비밀번호\t 이름\t 전화번호\t 주소");
System.out.println("-----------------------------------------");
try {
conn = DBUtil.getConnection();
String sql = " select * from mymember ";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
int cnt = 0; // 출력한 데이터 개수가 저장될 변수
while(rs.next()) {
cnt++;
String memId = rs.getString("mem_id");
String memPass = rs.getString("mem_pass");
String memName = rs.getString("mem_name");
String memTel = rs.getString("mem_tel");
String memAddr = rs.getString("mem_addr");
System.out.println(memId + "\t" + memPass + "\t" + memName + "\t" + memTel + "\t" + memAddr);
}
if(cnt == 0) {
System.out.println(" \t등록된 회원이 하나도 없습니다... ");
}
System.out.println("-----------------------------------------");
System.out.println();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(rs != null) try { rs.close(); } catch (SQLException e) {}
if(pstmt != null) try { pstmt.close(); } catch (SQLException e) {}
if(conn != null) try { conn.close(); } catch (SQLException e) {}
}
}
// 메뉴를 출력하고 입력받은 선택 번호를 반환하는 메서드
private int displayMenu() {
System.out.println("=== 작업 선택 ===");
System.out.println("1. 자료 추가");
System.out.println("2. 자료 삭제");
System.out.println("3. 자료 수정");
System.out.println("4. 전체 자료 출력");
System.out.println("5. 자료 수정 2");
System.out.println("0. 작업 끝");
System.out.println("--------------");
System.out.print("작업 선택 >> ");
return Integer.parseInt(scan.nextLine());
}
}
[dbinfo.properties]
# 이 줄은 주석 처리 줄 입니다...
# 이 properties 파일을 작성하는 방법은
# 'key값=value값' 과 같은 모양으로 작성합니다.
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
user=pc_09
password=java
[PropertiesTest.java]
package kr.or.ddit.basic;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
public class PropertiesTest {
public static void main(String[] args) {
// 읽어온 파일 정보를 저장할 Properties 객체 생성
Properties prop = new Properties();
// 읽어올 파일 정보를 이용한 File 객체 생성
File f = new File("res/kr/or/ddit/jdbc/config/dbinfo.properties");
FileInputStream fin = null;
try {
// 파일 내용을 읽어올 스트림 객체 생성
fin = new FileInputStream(f);
// 입력 스트림을 이용하여 파일 내용을 읽어와 Properties 객체에 저장하기
prop.load(fin); // 파일 내용을 읽어와 key값과 value값을 분류한 후
// 분류된 자료를 Properties 객체에 추가한다.
// 읽어온 정보 출력해 보기
System.out.println("driver : " + prop.getProperty("driver"));
System.out.println("url : " + prop.getProperty("url"));
System.out.println("user : " + prop.getProperty("user"));
System.out.println("password : " + prop.getProperty("password"));
} catch (Exception e) {
e.printStackTrace();
} finally {
if(fin != null) try { fin.close(); } catch (IOException e) {}
}
}
}
[DBUtil2.java]
package kr.or.ddit.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
// JDBC드라이버를 로딩하고
// Connection객체를 생성해서 반환하는 메서드로 구성된 class
// (dbinfo.properties 파일의 내용을 이용하여 설정하기)
// ==> Properties 객체 이용하기
public class DBUtil2 {
static Properties prop; // Properties객체 변수 선언
static {
prop = new Properties(); // Properties객체 생성
File f = new File("res/kr/or/ddit/jdbc/config/dbinfo.properties");
FileInputStream fin = null;
try {
fin = new FileInputStream(f);
prop.load(fin);
// Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName(prop.getProperty("driver"));
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 실패~~~");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(fin != null) try { fin.close(); } catch (IOException e) {}
}
}
public static Connection getConnection() {
Connection conn = null;
// String url = "jdbc:oracle:thin:@localhost:1521:xe";
// String user = "pc_09";
// String password = "java";
String url = prop.getProperty("url");
String user = prop.getProperty("user");
String password = prop.getProperty("password");
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
System.out.println("DB 연결 실패~~~");
e.printStackTrace();
}
return conn;
}
}
[jdbcTest06_2.java]
package kr.or.ddit.basic;
import java.sql.Connection;
...
public class jdbcTest06_2 {
...
// 전체 회원 정보를 출력하는 메서드
private void displayAllMember() {
...
try {
...
conn = DBUtil2.getConnection(); // 여기를 바꿔서 실행되면 성공
...
}
}
[ResourceBundleTest.java]
package kr.or.ddit.basic;
import java.util.ResourceBundle;
/*
* ResourceBundle객체 ==> 파일의 확장자가 '.properties'인 파일의 내용을 읽어와
* key값과 value값을 분리해서 정보를 갖고 있는 객체
*/
public class ResourceBundleTest {
public static void main(String[] args) {
// ResourceBundle 객체를 이용하여 '.properties' 파일 읽어오기
// ResourceBundle 객체 생성
// ==> 읽어올 파일을 지정할 때 '패키지명.파일명'만 지정하고
// 확장자는 지정하지 않는다.
ResourceBundle bundle = ResourceBundle.getBundle("kr.or.ddit.jdbc.config.dbinfo");
// 읽어온 내용 출력하기
System.out.println("driver : " + bundle.getString("driver"));
System.out.println("url : " + bundle.getString("url"));
System.out.println("user : " + bundle.getString("user"));
System.out.println("password : " + bundle.getString("password"));
}
}
[DBUtil3.java]
package kr.or.ddit.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;
// JDBC드라이버를 로딩하고
// Connection객체를 생성해서 반환하는 메서드로 구성된 class
//(dbinfo.properties 파일의 내용을 이용하여 설정하기)
//==> ResourceBundle 객체 이용하기
public class DBUtil3 {
static ResourceBundle bundle; // ResourceBundle객체 변수 선언
static {
// 객체 생성
bundle = ResourceBundle.getBundle("kr.or.ddit.jdbc.config.dbinfo");
try {
// Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName(bundle.getString("driver"));
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 실패~~~");
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection conn = null;
// String url = "jdbc:oracle:thin:@localhost:1521:xe";
// String user = "pc_09";
// String password = "java";
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
System.out.println("DB 연결 실패~~~");
e.printStackTrace();
}
return conn;
}
}
[jdbcTest06_2.java]
package kr.or.ddit.basic;
import java.sql.Connection;
...
public class jdbcTest06_2 {
...
// 전체 회원 정보를 출력하는 메서드
private void displayAllMember() {
...
try {
...
conn = DBUtil3.getConnection(); // 여기를 바꿔서 실행되면 성공
...
}
}
[JavaDocTest.java]
package kr.or.ddit.basic;
// JavaDoc 문서 파일 만들기 예제
/**
*
* @author 홍길동
* @version 1.0
*
* <p>
* 파일명 : JavaDocTest.java <br />
* 설 명 : JavaDoc문서 작성 연습을 위한 연습용 interface <br /><br />
* 변경 이력 <br />
* ----------------------------------<br />
* 변경일자 : 2023-09-15 <br />
* 변경자 : 홍길동 <br />
* 변경내용 : 최초 작성 <br />
* ----------------------------------<br />
* </p>
*
*/
public interface JavaDocTest {
/**
* 메서드명 : methodTest <br />
* 설 명 : 반환값이 없는 메서드 <br />
*
* @param a 첫번째 매개변수(정수형)
* @param b 두번째 매개변수(정수형)
*/
public void methodTest(int a, int b);
/**
* 메서드명 : methodAdd <br />
* 설 명 : 반환값이 있는 메서드 <br />
*
* @param x 정수형 첫번째 매개변수
* @param y 정수형 두번째 매개변수
*
* @return 처리된 결과를 정수형으로 반환한다.
*/
public int methodAdd(int x, int y);
/**
* 메서드명 : methodSub <br />
* 설 명 : 매개변수가 없고 반환값이 있는 메서드 <br />
*
* @return 정수형으로 반환한다.
*/
public int methodSub();
}
* VM options에 반드시 포함되어야 할 문자
-charset utf-8 -encoding utf-8
[DocTest.java]
package kr.or.ddit.basic;
public class DocTest {
public static void main(String[] args) {
System.out.println("test");
JavaDocTest test = null;
test.methodAdd(1, 2);
test.methodSub();
test.methodTest(1, 2);
// MVC패턴에서 사용하는 클래스들
// 1) VO 또는 DTO 객체
// 2) DAO 객체
// 3) Service 객체
// 위 객체들의 역할(쓰임새)에 대하여 공부하기
}
}
* 메서드 위에 마우스를 올리거나 test. 을 쳐서 메서드를 부를 때 작성해 놓은 설명이 한글로 뜬다.
'대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글
230919_MVC 2 (0) | 2023.09.18 |
---|---|
230918_MVC 1 (0) | 2023.09.15 |
230914_JDBC 2 (0) | 2023.09.14 |
230913_JDBC 1 (0) | 2023.09.12 |
230912_입출력 6 (0) | 2023.09.11 |