※ 개인적인 개발 수업 정리글입니다. 꾸준히 정리할 예정이고 틀린 부분이 있다면 언제든지 댓글 환영입니다.
JDBC ( Java DataBase Connectivity )
JDBC (Java DataBase Connectivity) : 자바언어에서데이터베이스에접근할수있는프로그래밍API
순수 jdk로는 DBMS에 접근할 수 없음, sql 못 실행 시킴!
각 회사에서 자기네 DBMS에 접근하는 프로그램API(=드라이버)를 제공하고, 사용해서 접근
DAO (Data Access Object)
DTO (Data Transfer Object)
탐색기 경로:
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
자바랑 오라클 사용가능하게 만든 드라이버:
ojdbc6_g.jar
====>사용하는 이클립스 폴더 안에 드라이버 폴더를 따로 하나 만들고, 그 안에 꼭 복붙
★★★★★프로젝트를 새로 만들 때 마다,★★★★★
Build Path - Libraries -Add External JARs... - 위의 폴더에 저장해놨던, 드라이버파일을 끌어옴.
★★★★★★★★★★★★★★★★★★★★★★★




남에게서 받은 파일의 경로는,
내 파일의 경로와 달라서 ! 오류가 뜨기 때문에
내가 쓰는 환경으로 바꿔줘야함.
Build Path - Libraries - 그냥 오류 나는 파일 삭제하고, -Add External JARs... - 새로 불러옴
JDBC 구현 순서 ★무조건 기억해야함!!!
0. ※※※※※ 드라이버 연결!!! ※※※※※
1.오라클DBMS 연동을 위한 4가지 저장.
Stringdriver ="oracle.jdbc.driver.OracleDriver";
Stringurl ="jdbc:oracle:thin:@localhost:1521:orcl"; //마지막 orcl를 SID라고 하는데 이것만 쓸 계정으로 바꿔주면됨
Stringuserid ="scott"; //오라클의 사용자이름(대소문자 구분안함)
Stringpasswd="tiger"; //오라클의 비밀번호(대소문자 구분함!!!)
SID란? 오라클 들어가서

orcl을 XE로 바꿔주면 됨
2. 드라이버로 자주 쓸 변수들 선언
: trycatch안에서 많이 쓰기 때문에, 멤버변수로 trycatch바깥에 미리 선언.
ㄴ때에 따라서, 쓰면 선언하고, 안쓰면 안 씀
Connection con = null;
PreparedStatement pstmt = null; // Statement stmt = null;
ResultSet rs = null;
2. 드라이버 로딩
Class.forName( driver );
//클래스는 forName함수를 부르고, driver에 ("oracle.jdbc.driver.OracleDriver")를 준다.
//이게 안맞으면 ClassNotFoundException 터짐
// 여기까지 하면, 데이터베이스에 사용할 라이브러리를 가져오는데까지 끝났음.

ㄴ이 함수를 사용하는 곳에서
① try { 여기에 넣고 } catch (ClassNotFoundException e)로 잡아주든가
② main함수에 throws ClassNotFoundException 날려야함.

3. Connection 맺기
Connection con = DriverManager.getConnection( url, userid , passwd );
//DriverManager가 getConnection함수를 부르고, (url, 아디,비번)를 주고
//Connection에 넣어서 con이라는 이름으로 이용
// 이게 안맞으면 SQLException 터짐
//getConnection함수 : java와 Oracle을 연결시켜주는 함수. " ( 인자) 쪽으로 접속하고 리턴해줌"
변수url : OracleDriver
변수userid : scott
변수passwd : tiger

ㄴ이 함수를 사용하는 곳에서
① try { 여기에 넣고 } catch (SQLException e)로 잡아주든가
② main함수에 throws SQLException 날려야함.

만약, [ 2.드라이버 로딩 ]과 [ 3. 오라클 연결 ]까지 제대로 되면 나오는 출력문

ㄴ제대로 안되면, catch문으로 가서 오류 뜨는거임
4. SQL 문 작성 ( developer에서는 ;로 끝냈지만, 여기서는 ;(세미콜론) 사용안함)
String query = "SELECT deptno,dname,loc FROM dept";
또는
String query = "DELETE FROM dept WHERE deptno = 40";
//sql 작성만 된거고 실행이 된건 아님

5. sql 실행. PreparedStatement생성
PreparedStatement pstmt = con.prepareStatement( query);
PreparedStatement pstmt = con.prepareStatement( query);
// con은 prepareStatement함수를 부르고, 위의 query를 주는데
// prepareStatement함수는, 쿼리를 전송만 하는 함수?
// 그냥 statement가 있고 preparedstatement가 있음
preparedstatement가 편하지만, statement하는 방법도 알아두기
//여기까지가 sql실행 준비 완료인거임
6. DB에 SQL 문 전송(실행) 및 결과값 얻기
PreparedStatement pstm를 이용해서 executeUpdate,executeQuery함수에 쓰면,
executeUpdate,executeQuery는 전송받은 쿼리를 실행하는 함수?
■ sql 내용이, DML ( INSERT, DELETE, UPDATE )였다면,
int n = pstmt.executeUpdate(sql); //반영된 insert 갯수를 가져올 수 있음
■ sql 내용이, SELECT였다면,
ResultSet rs = pstmt.executeQuery(sql); //select결과를 반복문으로 볼수 있게 rs에 받아줌.

rs.next()함수로 하나의 행 가져올수있음.
그 행엔 deptno, dname, loc가 있고 만약 deptno만 가져오고 싶으면 rs.getInt("Deptno");
컬럼수를 가져오는 함수는 rs.getColumnCount();
// rs.next() , rs.getMetaData() , rs.getColumnCount(), rs.getInt(컬럼명), rs.getString(컬럼명) 이용하여데이터추출.
ex)
while( rs.next( ) ) { //1번째 줄..2번째 줄... 3번째 줄.. 반복한다.
int deptno = rs.getInt("deptno"); //1번째 줄 "deptno"=int 10 ;
String dname = rs.getString("dname"); //1번째 줄 "dname"=String "ACCOUNTING" ;
String loc = rs.getString("loc"); //1번째 줄 "dname"=String "NEW YORK" ;
System.out.println( deptno +“ ” + dname + " " +loc ); //1번째 줄 전체출력
} // 1번째 줄 끝났고, 다시 처음으로 돌아가서 2번째 줄 반복...3번째 줄 반복... DB끝날때까지
***컬럼번호로도 이용가능***
int deptno = rs.getInt( 1 );
String dname = rs.getString( 2 );
String loc = rs.getString( 3 );
7. 자원반납( 사용했던 자원 역순)
다 끝났으면, 사용햇던 변수를 마지막에서->처음으로 닫아줘야함. *Scanner 같은 것도 close해야함
finally { // finally는 trycatch가 실행됐든 아니든 꼭 실행하는 문장.
try {
if ( rs != null) rs.close(); // rs 먼저!!!! ResultSet을사용한경우
if ( stmt != null) stmt.close();
if ( con != null) con.close(); //★특히 커넥션 끊는게 중요
} catch (SQLException e) {
e.printStackTrace();
}
}

수요일에 만든 클래스들
내가 정리한 JDBC 구현순서
※※프로젝트 만들때 마다, Build Path에 ojdbd6_g_jar 파일 추가
JDBC ( Java DataBase Connectivity ) -인터페이스를 구현한 클래스 파일들의 묶음을 드라이버(driver=ojdbd6_g_jar)
DAO ( Data Access Object )
DTO ( Data Transfer Object )
1.오라클DBMS 연동을 위한 4가지 저장.
// 1. 4가지 정보 이용
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:XE";// orcl->SID일치 확인
String userid = "scott";
String passwd = "tiger";
////Stringurl 마지막 orcl를 SID라고 하는데 이것만 쓸 계정으로 바꿔주면됨
2.드라이버 생성 : trycatch를 많이 쓰기 때문에, 바깥에 미리 선언해두면 좋음.
Connection con = null; //DB에 접속하는 객체. DriverManager에서 얻음
PreparedStatement pstmt = null; //sql을 실행하는 객체. Connection에서 얻음
// Statement stmt = null; //sql을 실행하는 객체. Connection에서 얻음
ResultSet rs = null; //sql의 select결과를 저장하는 객체.
//State의 executeQuery함수 실행 결과로 얻음
2. 드라이버 로딩 [trycatch문 시작]
Class.forName( driver ); //driver = ojdbd6_g_jar
//이게 안맞으면 ClassNotFoundException 터짐
// 여기까지 하면, 데이터베이스에 사용할 라이브러리를 가져오는데까지 끝났음.
3. Connection 연결
con = DriverManager.getConnection(url, userid, passwd);
// 이게 안맞으면 SQLException 터짐
4. sql 작성
String name="SALES";
String sql = "select deptno x,dname,loc from dept";
System.out.println(sql);
5. sql 실행. pstatment,statement 객체 생성
pstmt = con.prepareStatement(sql);
//변수con은 prepareStatement함수를 부르고, (위의 query)를 준다.
받아온걸 변수pstmt라는 이름으로 이용.
//여기까지가 sql실행 준비 완료인거임
6. 실행하고 결과값 받기
■ DML 요청( INSERT, DELETE, UPDATE )
int n = pstmt.executeUpdate(sql); //반영된 insert 갯수를 가져올 수 있음
■ SELECT 요청
ResultSet rs = pstmt.executeQuery(sql); //select결과를 반복문으로 볼수 있게 rs에 받아줌.
┌ rs가 함수를 부르고, (원하는거) 줘서 데이터 추출.
// rs.next() , rs.getMetaData() , rs.getColumnCount(), rs.getInt(컬럼명), rs.getString(컬럼명) 이용하여데이터추출.
ex)
while( rs.next( ) ) { //1번째 줄..2번째 줄... 3번째 줄.. 반복한다.
int deptno = rs.getInt("deptno"); //1번째 줄 "deptno"=int 10 ;
String dname = rs.getString("dname"); //1번째 줄 "dname"=String "ACCOUNTING" ;
String loc = rs.getString("loc"); //1번째 줄 "dname"=String "NEW YORK" ;
System.out.println( deptno +“ ” + dname + " " +loc ); //1번째 줄 출력
} // 1번째 줄 끝났고, 다시 처음으로 돌아가서 2번째 줄 반복...3번째 줄 반복... DB끝날때까지
***컬럼번호 이용도 가능***
int deptno = rs.getInt( 1 );
String dname = rs.getString( 2 );
String loc = rs.getString( 3 );
7. 자원반납( 사용했던 자원 역순)
다 끝났으면,
finally { // finally는 trycatch가 실행됐든 아니든 꼭 실행하는 문장.
try {
if (rs != null) rs.close(); // ResultSet을사용한경우
if (stmt != null) stmt.close();
if (con != null) con.close(); //★특히 커넥션 끊는게 중요
} catch (SQLException e) {
e.printStackTrace();
}
}
'Govern > JDBC, mybatis, Eclipse EE' 카테고리의 다른 글
08-03(화) 2.Mapper에 selectByHashMap만들기 (0) | 2021.08.03 |
---|---|
08-03(화) 1. Mapper에 insert, delete, update 만들기 (0) | 2021.08.03 |
08-02(월) (0) | 2021.08.02 |
08-02(월) mybatis (0) | 2021.08.02 |
07-30(금) (0) | 2021.07.30 |