BASHA TECH
0803. 나중에 수정 본문
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