반응형
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 |
Tags
- 동기화
- 아이디중복
- first-child
- MemoryStream
- Daemon()
- StringReader
- interrupt()
- 스레드그룸
- 상관 서브 쿼리
- first-of-child
- include 지시자
- sleep()메소드
- 상관서브쿼리
- ID중복
- include액션태그
- StringWriter
- ThreadGroup()
- 표현 언어
- isinterrupted()
- 리눅스세팅
- 메모리스트림
- char[] String 형변환
- String char[] 형변환
- 리눅스셋팅
- include지시자
- Linux세팅
- InputDialog
- interrupted()
- ObjectInputStream
- Linux셋팅
Archives
- Today
- Total
다연이네
[days02] DEPT 테이블 조회, 추가, 수정, 삭제, 검색 본문
반응형
package days02;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import com.util.DBConn;
public class Ex03 {
static Connection con = null;
static int selectedNumber ; //선택된 메뉴 저장하는 변수
static Scanner scanner = new Scanner(System.in);
static char _continue;
public static void main(String[] args) {
// Dept 테이블 CRUD 처리
/*
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
*/
con = DBConn.getConnection();
while(true) {
메뉴출력();
메뉴선택();
메뉴처리();
}//while
}//main
private static void 메뉴처리() {
switch (selectedNumber) {
case 1: //부서정보
//System.out.println("부서 정보 출력");
getAllDeptInfo(); //함수 호출
break;
case 2: //부서추가
//System.out.println("부서 추가");
addDept();
break;
case 3: //부서수정
//System.out.println("부서 수정");
editDept();
break;
case 4: //부서삭제
//System.out.println("부서 삭제");
removeDept();
break;
case 5: //부서검색
//System.out.println("부서 검색");
searchDept();
break;
case 6: //종료
exit();
break;
default: //입력잘못
break;
}
}//메뉴처리
private static void removeDept() {
System.out.print(">삭제할 부서번호(deptno)를 입력하세요?");
//nextLine() 13,10제거...
//의미가 없다 버퍼에 있는거 지우면 System.in.skip(System.in.available())
scanner.nextLine();//enter(13,10) 50, 60
String deptno = scanner.nextLine();
String sql = String.format(
"DELETE FROM dept"
+ " WHERE deptno in( %s )", deptno);
Statement stmt = null;
try {
stmt = con.createStatement(); //Statement 가져오기
int rowcount = stmt.executeUpdate(sql); //DML
if(rowcount >0) {
System.out.println(" 부서들 삭제 완료");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}//finally
일시정지();
}//removeDept
private static void editDept() {
System.out.println("> 수정할 부서번호(deptno)를 입력하세요 ? ");
int deptno = scanner.nextInt(); //50 부서명, 지역명 확인했다치고
System.out.print("> 수정할 부서명(dname), 지역명(loc)을 입력하세요 ? ");
String dname = scanner.next(); //입력할때 홑따옴표 붙어야하니까
String loc = scanner.next();
String sql = String.format(
"UPDATE dept " //하나만 바꿀수도 있고 두개를 바꿀수도 있고
+" SET dname ='%s', loc = '%s' " //홑따옴표 필수...
+" WHERE deptno= %d", dname, loc, deptno);
//*****쿼리 반드시 확인
//System.out.println(sql);
Statement stmt = null;
try {
stmt = con.createStatement();
int rowCount = stmt.executeUpdate(sql);
if(rowCount ==1 ) {
System.out.println("> 1개 부서 수정 완료...");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
일시정지();
}//editDept
private static void searchDept() {
// 검색조건 ㄱ.부서명 ㄴ.지역명
System.out.println("> 검색 조건 선택<");
System.out.println(" 1. 부서명 검색 ");
System.out.println(" 2. 지역명 검색 ");
메뉴선택(); //selectedNumber 변수에 1,2 저장
//동적 SQL 사용하자 (PL/SQL) 지금은 아니고
System.out.print("> 검색어 입력 ? ");
String searchWord = scanner.next();
String sql = "SELECT * FROM DEPT ";
switch (selectedNumber) {
case 1: //부서명
sql+= "WHERE dname LIKE '%"+searchWord+"%'";
break;
case 2: //지역명
sql+= String.format("WHERE loc LIKE '%%%s%%'", searchWord);
//와일드카드의%이기 때문에 %% (%는 2개 써야 출력됨)
break;
}
//*****꼭 and 반드시 작성된 쿼리 확인한다 ******
//System.out.println(sql);
//나중에는 두개만들 필요 없음 (밑에쿼리 전부 getAllDeptInfo에서 복붙한거)
Statement stmt = null;//일꾼객체
ResultSet rs = null;
ArrayList<DeptDTO> list = null;
DeptDTO dto = null;
int deptno;
String dname, loc; //하나의 정보를 저장할 변수들
try {
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
if(rs.next()) { //한명도 없다면 어레이리스트 생성하지 않도록
list = new ArrayList<DeptDTO>();
do {
deptno = rs.getInt("DEPTNO");
dname = rs.getString("dname");
loc = rs.getNString("loc");
//dto = new DeptDTO(); //컨트롤누르고 deptdto 가서 생성자 수정 (매개변수 3개짜리 생성자 만들기)
// dto.setDEPTNO(dEPTNO);
// dto.setDNAME(dNAME);
// dto.setLOC(lOC); -> 이렇게 안하려고 생성자 추가한 것
dto = new DeptDTO(deptno, dname, loc);
list.add(dto);
}while(rs.next());
}
} catch (SQLException e) {
e.printStackTrace();
} finally { //잘 처리되든 말든
try {
rs.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}//finally
//list 출력
System.out.println("> 모든 부서 정보 출력 <");
if (list ==null) {
System.out.println("> 검색 결과 없습니다.");
}else {
Iterator<DeptDTO> ir = list.iterator();
while (ir.hasNext()) {
dto= ir.next();
System.out.println(dto);
}
}
일시정지();
//여까지 복붙한거 ㅎ + if(list==null) else 만 추가함
}//searchDept
private static void addDept() {
do {
System.out.println("[부서 정보 입력]");
//deptno는 seq_dept 시퀀스 사용
System.out.println("1. 부서명 입력 ? ");
String dname = scanner.next();
System.out.println("2. 지역명 입력 ? ");
String loc = scanner.next();
// String sql = "INSERT INTO dept(deptno, dname, loc) "
// + "VALUES (seq_dept.nextval, "+dname+", '"+loc+"')";
String sql = String.format("INSERT INTO dept(deptno, dname, loc) "
+"values (seq_dept.nextval, '%s', '%s')", dname, loc);
Statement stmt = null;
try {
stmt = con.createStatement();
//insert, update, delete : executeUpdate() 사용
//select : executeQuery() 사용
int rowCount = stmt.executeUpdate(sql); //insert된 개수
if(rowCount==1) { //1개가 추가되면 잘 된 것
System.out.println(">1개 부서 추가 완료...");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
계속여부확인();
}while(Character.toUpperCase(_continue)=='Y');
일시정지(); //입력 완료된 후에도 잠시 멈춰서 돌도록
}//addDept
private static void 계속여부확인() {
System.out.print("> 계속 할거야 ? ");
try {
_continue = (char)System.in.read();
System.in.skip(System.in.available()); //13,10번 값 삭제
} catch (IOException e) {
e.printStackTrace();
}
}//계속여부확인
private static void getAllDeptInfo() {
String sql = "SELECT * FROM DEPT ORDER BY deptno ASC";
//프로그램 시작하자마자 con객체는 얻어왔고 DB는 나중에 프로그램 종료할 때 종료 메소드 호출하면 닫음
//그 동안은 안닫음 => 커넥션 객체는 더이상 처리할 필요가 없음
Statement stmt = null;//일꾼객체
ResultSet rs = null;
ArrayList<DeptDTO> list = null;
DeptDTO dto = null;
int deptno;
String dname, loc; //하나의 정보를 저장할 변수들
try {
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
if(rs.next()) { //한명도 없다면 어레이리스트 생성하지 않도록
list = new ArrayList<DeptDTO>();
do {
deptno = rs.getInt("DEPTNO");
dname = rs.getString("dname");
loc = rs.getNString("loc");
//dto = new DeptDTO(); //컨트롤누르고 deptdto 가서 생성자 수정 (매개변수 3개짜리 생성자 만들기)
// dto.setDEPTNO(dEPTNO);
// dto.setDNAME(dNAME);
// dto.setLOC(lOC); -> 이렇게 안하려고 생성자 추가한 것
dto = new DeptDTO(deptno, dname, loc);
list.add(dto);
}while(rs.next());
}
} catch (SQLException e) {
e.printStackTrace();
} finally { //잘 처리되든 말든
try {
rs.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}//finally
//list 출력
System.out.println("> 모든 부서 정보 출력 <");
Iterator<DeptDTO> ir = list.iterator();
while (ir.hasNext()) {
dto= ir.next();
System.out.println(dto);
}
일시정지();
}//getAllDeptInfo
private static void 일시정지() {
System.out.println("\t\t 엔터치면 계속합니다");
try {
System.in.read();
System.in.skip(System.in.available());
} catch (IOException e) {
e.printStackTrace();
}
}
//마무리작업 + 프로그램 종료
private static void exit() {
System.out.println("\t\t 프로그램 종료합니다.");
DBConn.close(); //DB커넥션 종료
con = null; //con에 null값 주고
System.exit(-1); //실제프로그램 종료
}//exit
private static void 메뉴선택() {
System.out.print("> 메뉴 선택하세요 ? ");
selectedNumber = scanner.nextInt();
}//메뉴선택
private static void 메뉴출력() {
String [] menus = {
"부서 정보",
"부서 추가",
"부서 수정",
"부서 삭제",
"부서 검색",
"종료"
};
System.out.println(">메뉴 출력<");
for (int i = 0; i < menus.length; i++) {
System.out.printf("%d. %s\n", (i+1), menus[i]);
}
}//메뉴출력
}//class
반응형
'JDBC' 카테고리의 다른 글
[days03] PreparedStatement - 사원 추가, 수정, 삭제 (0) | 2020.11.25 |
---|---|
[days03] 문제) 부서별 소속 사원수 정렬하여 출력 (0) | 2020.11.25 |
[days03] 사원 조회, 추가, 삭제 (0) | 2020.11.25 |
[days02] 싱글톤 클래스 SELECT(조회) 작업하기 (0) | 2020.11.25 |
[days02] 싱글톤 클래스 작성 (0) | 2020.11.24 |
Comments