BASHA TECH

0803. 나중에 수정 본문

Assignments/#2

0803. 나중에 수정

Basha 2022. 8. 3. 17:17
728x90
더보기

C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
ojdbc5.jar => oracle 10g
ojdbc6.jar =implements=> JDBC/ oracle 11g(현재 설치 버전임) : 선택복사 후 D:\big15\lib에 붙여넣기

라이브러리의 경로를 지정해주는 것 build path
해당 프로젝트 오른쪽 마우스 >libraries >add external jars>ojdbc6.jar 선택

JAVA

lib\EmpManage.java

package lib;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class EmpManage {
//	1. 사원 목록 조회
	public void searchAll() {
//		Connection Test
//		ip address, userid, userpw, port, sid 정보 
//		=> Server Connection(연결)
//		JDBC => Connection interface : JDBC는 하나의 큰 package

		Connection conn = null;
		Statement stmt 	= null;
		ResultSet rs 	= null;
		
//		jdbc:oracle:thin: => oracle server 어떤 방식으로 연결 지정 (DB마다 조금씩 다르긴 한데 암기)
//		@localhost:1521:xe
		String url 		= "jdbc:oracle:thin:@localhost:1521:xe";
		String userid 	= "ora_user";
		String userpw 	= "hong";
		
		StringBuilder sql = new StringBuilder();
		sql.append("SELECT a.empno, a.empnm, b.deptnm");
		sql.append("  FROM emp a					 ");
		sql.append("	 , dept b                    ");
		sql.append(" WHERE a.DEPTNO = b.DEPTNO       ");
		
//		1. JDBC 드라이버 로딩(메모리에 올리는 것)
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
//		2. Connection 작업 진행 (실질적으로 접속하는 작업)
			conn = DriverManager.getConnection(url, userid, userpw);  //해당 url or userid or userpw에서 에러가 날 수 있기 때문에 여기에 맞게 또 catch 

//		3. Statement 생성 : statement는 SQL 명령을 서버에 전달하는 애다. 
			stmt = conn.createStatement();

			rs = stmt.executeQuery(sql.toString());
			
			while(rs.next()) {
				String empno = rs.getString("empno");
				String empnm = rs.getString("empnm");
				String deptnm = rs.getString("deptnm");
				System.out.println(empno + "|"
								 + empnm + "|"
								 + deptnm);
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
		}
	}
	
//	2. 사원 이름 검색 조회
	public void searchByName(String sempnm) { // 변수명은 컬럼명과 최대한 동일하게 만들기
		Connection conn = null;
		Statement stmt 	= null;
		ResultSet rs 	= null;
		
		String url 		= "jdbc:oracle:thin:@localhost:1521:xe";
		String userid 	= "ora_user";
		String userpw 	= "hong";
		
		StringBuilder sql = new StringBuilder();
//		4. SQL 실행
		sql.append("SELECT a.empno, a.empnm, b.deptnm		");
		sql.append("  FROM emp a					 		");
		sql.append("	 , dept b                    		");
		sql.append(" WHERE a.DEPTNO = b.DEPTNO       		");
		sql.append("   AND a.EMPNM LIKE '%" + sempnm + "%'  ");
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			conn = DriverManager.getConnection(url, userid, userpw);
			stmt = conn.createStatement();

			rs = stmt.executeQuery(sql.toString());  // ResultSet은 결과를 받는 애.
			
			while(rs.next()) {
				String empno = rs.getString("empno");
				String empnm = rs.getString("empnm");
				String deptnm = rs.getString("deptnm");
				System.out.println(empno + "|"
								 + empnm + "|"
								 + deptnm);
			}
		} catch (ClassNotFoundException e) { // ClassNotFoundException => class가 없을 경우 catch 블록하라는 뜻
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				rs.close();
				stmt.close();
				conn.close();  // connection을 끊겠다
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
		}
	}
	
//	3. 사원 추가
	public void insertEmp(){ //prepare statement는 다음에
		Connection conn = null;
		Statement stmt = null;
		
		String url 		= "jdbc:oracle:thin:@localhost:1521:xe";
		String userid 	= "ora_user";
		String userpw 	= "hong";
		//method로 만들면 이렇게 계속 그대로 복붙할 이유 없음
		StringBuilder sql = new StringBuilder();
		sql.append("INSERT INTO emp				");
		sql.append("VALUES ('600', '아이유', '30')	"); //java는 commit하지 않더라도 auto commit=> 여기 값은 키보드로 입력 받기
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(url, userid, userpw);
			stmt = conn.createStatement();
			int cnt = stmt.executeUpdate(sql.toString());
			if (cnt == 1) {
				System.out.println("정상 추가");
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {			
			try {
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
//	4. 사원 정보 수정
	
//	5. 사원 삭제
	
}

main\ConnectionTest.java

package main;

import lib.EmpManage;

public class ConnectionTest {

	public static void main(String[] args) {
		EmpManage em = new EmpManage();
		em.searchAll();
		em.searchByName("둘리");
		em.insertEmp();
		em.searchByName("아이");
	}

}

SQL

SELECT empnm
	FROM emp
;

CREATE TABLE emp(
		empno NUMBER
	, empnm VARCHAR2(30)
	, deptno VARCHAR2(10)
);

INSERT INTO emp VALUES(100,'홍길동','10');
INSERT INTO emp VALUES(200,'고길동','20');
INSERT INTO emp VALUES(300,'마이꼴','10');
INSERT INTO emp VALUES(400,'희동','');

COMMIT;

DESC emp;

DESC departments;

SELECT a.empno, a.empnm, b.DEPARTMENT_ID, b.DEPARTMENT_NAME
	FROM EMP a
	   , dept b
 WHERE a.DEPARTMENT_ID = b.DEPARTMENT_ID
;


DESC dept;

--100   홍길동   10 | 10   개발부
--200   고길동   20 | 20   총무부
--300   마이꼴   10 | 30   영업부
--400   희동   NULL

CREATE TABLE dept(
		deptno VARCHAR2(10)
	, deptnm VARCHAR2(30)
	, empno NUMBER
);

INSERT INTO dept VALUES('10','개발부',100);
INSERT INTO dept VALUES('20','총무부',200);
INSERT INTO dept VALUES('30','영업부',300);

-- 문제 : 사원번호, 사원명, 부서명
SELECT a.empno, a.empnm, b.deptnm
FROM emp a, dept b
WHERE a.DEPTNO = b.DEPTNO
	AND a.EMPNM LIKE '%%'
;
-- query에서 잘 돌아가는 지 확인 하고 java에 갖다 쓰기.

COMMIT;
SELECT * FROM dept;

DELETE dept WHERE deptnm = '마이꼴';

INSERT INTO emp
VALUES ('500', '둘리', '30');
COMMIT;
728x90
반응형

'Assignments > #2' 카테고리의 다른 글

0811  (0) 2022.08.11
0810  (0) 2022.08.10
0809  (0) 2022.08.10
0805. DB 연동 전화번호부  (0) 2022.08.05
Comments