728x90
반응형

JDBC(Java DataBase Connection)

- 자바와 DB를 연동하는 기술
- 오라클 연동에 관련된 인터페이스들은 java.sql패키지 안에 들어가 있다.
java.sql.Connection : DB의 계정과 비번, url정보를 담고있는 객체
java.sql.Statement : DB의 SQL명령을 담을 수 있는 객체
java.sql.PreparedStatement : DB의 SQL명령을 담을 수 있는 객체
java.sql.ResultSet : select명령을 실행 후 가져오는 데이터의 결과 집합(레코드들의 묶음->인스턴스들)을 가리키고 있는 오라클의 커서와 동일한 기능을 가진 객체
0. 드라이버 준비
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
폴더 내부에서 현 오라클 버전과 맞는 파일 준비, 복사
오라클 11g -> ojdbc6.jar
오라클 10g -> ojdbc5.jar

JAR (Java Archive) : 자바로 만든 집합체

0-1. 자바프로젝트 위 1번의 jar파일추가
- 프로젝트명 선택 후 마우스 우버튼 클릭 > Build Path...선택
> Configure Build Path... 선택> Libraries탭 > Module ~~선택 후 오른쪽의 [Add Extanal JARs...]선택 > Apply and close

설치





개발툴인지

프레임워크인지

기술- JDBC

 

오라클은 1부터, 자바는 0부터 카운팅

 

결합도는 낮추고 응축도는 높이다.

java에서 auto commit;이 설정되어있다.

 

sql 년월일
ecl 시분초까지

1. 드라이버 설치
소스코드에 기술
- Class.forName('패키지경로포함.클래스명까지 기술') ;
Class.forName("oracle.jdbc.driver.OracleDriver") ;

C:\Users\hi\Desktop\ojdbc6\oracle\jdbc\driver\OracleDriver.class
=>oracle.jdbc.driver.OracleDriver
2.Connection객체 얻어오기( url, username, password)
- username = "오라클의 사용자계정명" => "test 또는 TEST"
- password = "1111"
- url = 형식 : jdbc:데이터베이스종류:[오라클인경우는드라이버버전까지:]@호스트명:포트번호:전역데이터베이스명(SID) ;
 => "jdbc:oracle:thin:@localhost:1521:xe"
 => "jdbc:oracle:thin:@127.0.0.1:1521:xe"
- Connection conn = DriverManager.getConnection(url, username, password) ;

import.java.sql.*;

String url = "jdbc:oracle:thin:@ localhost :1521:xe" ;
String username = "TEST" ;
String password = "1111" ;
Connection conn = DriverManager.getConnection(url, username, password) ;

Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "TEST", "1111") ;
- Statement자료형 객체인 경우 - PreparedStatement자료형 객체인 경우
Statement (정적쿼리)
1. 단일로 사용될 때 빠른 속도를 지닌다.
2. 쿼리에 인자를 부여x할 수 없다.
3. 매번 컴파일을 수행해야 한다.
4. 쿼리문에 값이 미리 입력되어 있어야 한다.
PreparedStatement (동적쿼리)
1. 여러 번 수행될 때 빠른 속도를 지닌다.
2. 쿼리에 인자를 부여o할 수 있다.
3. 처음 프리컴파일 된 후, 이후에는 컴파일을 수행하지 않음.
4. 쿼리문에 값이 인자로 저장된다.
Statement st = conn.createStatement(); PreparedStatement ps = conn.prepareStatement("SQL명령문 문자열");
4. 명령문 실행 및 데이터 담기
4-1. SELECT명령문 인 경우 (SELECT표구조, ResultSet로)  
ResultSet rs = st.executeQuery(" SELECT 명령문 문자열") ;





ResultSet rs = ps.executeQuery() ;

- rs.next() -> 1줄씩만 담아오는 오라클cursor객체와 유사기능
- while(rs.next()){
    실행코드들...;
  }
4-2. insert, delete, update인 경우(데이터 갱신이 발생됨)- 자동 commit;
st.executeUpdate("명령문 문자열") ;
int result = st.executeUpdate("명령문 문자열") ;
ps.executeUpdate() ;
int result = ps.executeUpdate() ;
  ----바인드 변수가 존재하는 경우
ps.set자료형(바인드변수위치값, 바인드변수 넣을 값) ;
ex) 
ps.setInt(1,10);
ps.setString(2, "Tom");
5. ResultSet객체에서 데이터 가져오기
rs.next() 반드시 해줘야 함.
rs.get자료형(컬럼위치의 값) ; => ex) rs.getInt(1) ;
rs.get자료형("컬럼명") ;  => ex) rs.getString("ename")
6. 자원반납 (객체 닫기)
rs.close (); // ResultSet
st.close (); / ps.close(); // Statement
conn.close(); // Connection
 
ㄹㄹ
package jdbc;

import java.sql.*;

public class JdbcTest {

	public static void main(String[] args) {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver") ;
			String url = "jdbc:oracle:thin:@localhost:1521:xe" ;
			String username = "TEST" ;
			String password = "1111" ;
			Connection conn = DriverManager.getConnection(url, username, password) ;
			Statement st = conn.createStatement(); //명령문을 담을 객체 생성
			ResultSet rs = st.executeQuery(
            "select EMPNO eno, ENAME enm, DEPTNO dno from emp where deptno = 10");
				//결과에 맞는 값만 떼올 수 있다.
				//별칭 지정시 대소문자 구분 없음
			while(rs.next()) {
//				int rs1 = rs.getInt(1);
				int rs1 = rs.getInt("eno");
//				String rs2 = rs.getString(2);
				String rs2 = rs.getString("ENM");
				int rs3 = rs.getInt("dno");
				System.out.println(rs1 + ", " + rs2 + ", " + rs3);
			}
			rs.close();
			st.close();
			//st.executeUpdate("DML문");
			System.out.println("데이터베이스 연결 성공");
			conn.close();
		} catch (ClassNotFoundException e) {
			System.out.println("오라클 드라이버가 잘못되었습니다.");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("데이터베이스 연결실패");
			e.printStackTrace();
		}
	}

}​
7782, CLARK, 10
7839, KING, 10
7934, MILLER, 10
데이터베이스 연결 성공

 

package dbc1;

public class User {
	private String url = "jdbc:oracle:thin:@localhost:1521:xe";
	private String user = "test";
	private String pwd = "1111";
	
	public String getUrl() {
		return url;
	}
	public String getUser() {
		return user;
	}
	public String getPwd() {
		return pwd;
	}
}
DAO(Data Access Object) : DB에 접근하기 위한 SQL명령문을 담고있는 객체
DTO(Data Transfer Object) : 데이터를 전송하는 객체
=Value Object : 데이터를 저장하는 객체 

 

 






728x90
반응형

'[JDBC]' 카테고리의 다른 글

[JDBC] TRANJACTION - COMMIT, ROLLBACK, 원자성  (0) 2024.02.01
[JDBC] ex) [회원정보테이블]  (0) 2024.01.31
[JDBC] DAO, DTO  (0) 2024.01.31
[JDBC] Ex  (0) 2024.01.31
[JDBC] Statement, PreparedStatement  (0) 2024.01.30

+ Recent posts