728x90
JDBC 관련클래스
: java.sql 패키지
DriverManager
: JVM에서 JDBC전체를 관리하는 클래스. Driver등록, Connection 연결작업 등
Driver
: DB를 만드는 Vendor(Oracle, MS-SQL, MYSQL등)을 implements하여 자신들의 DB를 연결할 수 있는 class를 만드는 인터페이스
Connection
: DB와 연결성을 갖는 인터페이스
Statement
: SQL문을 실행하는 인터페이스
ResultSet
: 조회된 결과 데이터를 갖는 인터페이스
JDBC 프로그래밍
- 제품군 선택 (Oracle, Mysql, MS-SQL 등)
- 연결객체 생성 (Connection)
[필요요소]
- DB서버의 주소
- 포트번호(0~63353개.한피시 안에서 서비스 종류를 판별하기 위해 사용)
- 연결계정
- 실행객체 생성 (Statement)
[관련요소]
- SQL문 작성
- SQL문 실행요청
- 결과객체 생성 (ResultSet)
- 행단위 데이터얻기
- 열 데이터 뽑기
드라이브 로딩 Driver loading (DB제품군 선택)
Class.forName("oracle.jdbc.driver.OracleDriver");
// Class.forName("클래스명");
// Class.forName("패키지명.드라이버클래스명");
- ClassNotFoundException 오류발생. try-catch문 혹은 예외처리
연결객체 생성 Connection (특정 DB서버연결)
Connection conn = DriverManager.getConnection(url, user, password);
String url = "jdbc:oracle:thin:@localhost:1521:xe"; // "localhost" == "127.0.0.1 == 내 pc
String user = "scott";
String password = "tiger";
//conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger");
System.out.println("DB연결 성공");
- url :접속DB ip, port번호, sid
- user: 접속계정
- pwd: 접속계정에 대한 비밀번호
실행객체 생성 Statement
- SQL문 (DML, DQL 실행가능)
Statement stmt = conn.createStatement();
//실행요청
int t = stmt.executeUpdate(sql); //DML 실행
int t = stmt.executeQuery(sql); //DQL 실행
- DML 작업
// 테이블 dept_copy에서 10번부서를 삭제
String sql = "DELETE FROM dept_copy WHERE deptno=10";
// --SQL문 실행요청
int t = stmt.executeUpdate(sql); // 삭제시점
System.out.println("T=" + t); //t: 수정 또는 삭제된 행의 갯수
if (t > 0) {
System.out.println("삭제성공");// t==> 삭제(또는 수정)된 행의 갯수
}
--테이블 dept_copy에서 20번, 30번 부서를 삭제하시오(삭제성공메세지 출력)
sql = "DELETE FROM dept_copy WHERE deptno IN(20,30)";
t = stmt.executeUpdate(sql);
System.out.println("T=" + t);
if (t > 0) {
System.out.println("삭제성공");
} else {
System.out.println("삭제실패");
}
결과객체 생성
- ResultSet : 조회된 결과(행열데이터)를 저장
- DQL 작업
//조회요청, 조회된 결과값(행열데이터) 리턴
ResultSet rs = Statement명.executeQuery(sql); //리턴값 ResultSet
//1. 행단위 데이터 얻기
rs.next(); //boolean값 리턴. 행 반환시 true
if(rs.next()){} // 0번 또는 1번 출력시. WHERE절에 primary key 비교
while(rs.next()){} //조회된 행의 갯수가 2행이상이 예상되어질 때
//2. 얻어온 행 안에서 개별 열데이터 얻기
rs.get자료형(columnIndex); // 칼럼번호
rs.get자료형(columnLabel); // 이름, 별명
// 20번 부서의 부서번호, 부서명, 부서위치를 출력하시오
sql = "SELECT deptno, dname, loc FROM dept WHERE deptno=20";
ResultSet rs = stmt.executeQuery(sql);
rs.next();
int deptno = rs.getInt(1); // 첫번째 칼럼데이터
String dname = rs.getString(2);// 두번째 칼럼데이터
String loc = rs.getString(3);// 세번째 칼럼데이터
System.out.println(deptno + dname + loc);
System.out.println("=======");
sql = "SELECT deptno, dname name, loc FROM dept";
rs = stmt.executeQuery(sql);
while(rs.next()) { //rs.next가 while 소괄호 안에서 실행됨
//rs.getInt(1) rs.getString(2) 숫자 표기가능
deptno = rs.getInt("deptno");
dname = rs.getString("name");
loc = rs.getString(3);
System.out.println(deptno +"\t"+ dname +"\t"+ loc);
}
JDBC AutoCommit 설정
conn.setAutoCommit(false); //기본값 true
conn.commit();
conn.rollback();
conn.close()
:연결끊는 객체
- DB는 데이터 공유를 위해 사용
- Connection은 유한개⇒ 다른사람을 위해 사용한 연결객체는 반환
- DB자원: Connection 생성→ Statement 생성 → ResultSet생성
- DB자원 반환은 역순으로 해주면 된다.
if(rs != null) rs.close();
if(stmt != null) stmt.close();
if(conn != null) conn.close();
// if문 사용안할시 NullPoineException 오류발생
- Connection만 끊어주면 Statement와 ResultSet도 자동적으로 끊김
'Web develop > JDBC_XML' 카테고리의 다른 글
[XML] XML 정의 및 구조 (0) | 2019.07.10 |
---|---|
[JDBC] Properties 사용법 및 사용예시 (0) | 2019.07.10 |
[JDBC] Swing에서 중복아이디 체크하기 (PrepareStatement 사용) (0) | 2019.06.19 |
[JDBC] Prepared Statement 사용법 및 사용예제 (0) | 2019.06.19 |
[JDBC] Properties MVC 사용예제 (+Swing) (0) | 2019.06.18 |