JDBC 시작 (Java Database Connectivity)
JDBC란?
간단하게는 JAVA와 DB를 연결해야 할 때 둘 사이의 연결고리가 되어주는 역할이다.즉 자바에 있는 데이터를 데이터베이스로 저장, 업데이트 하거나 반대로 DB에서 JAVA로 데이터를 꺼내 올 때 필요한 API이다.이것을 연동하는 자바의 API이름이 JDBC라고 한다. = JDBC API
우리는 연동함으로 인해 자바에서 쿼리를 날려 DB를 조작할 수 있게된다.
설정법
먼저 JDBC를 사용하기위해서는 자바 프로젝트에 jdbc드라이버를 추가해 줘야한다.
Eclipse에 가서 적용할 프로젝트에 우클릭 또는 ALT+ENTER을 해서 Properties에 들어가준다.
그리고 테두리에 있는 것을 왼쪽부터 클릭하여 Add External JARs.. 를 누르면
여기서 파일을 가져오는 방법은 다양하다. 자기가 원하는 곳에 다운받아놓고 경로를 찾아가 적용하는 방법 또는
이것을 받아도 되고 오라클 홈페이지에가서 받아도 된다.
오라클을 설치한 경우 C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6 경로로 가서 파일을 찾아도 된다.
그 다음 eclipse에 가서 상단 쪽 window를 누르고 Preferences를 누르고
1. General – Workspace – Text file encoding – other에서 UTF-8 선택
2. General – Editors – Text Editors – Spelling UTF-8 변경
까지 해주면 설정이 완료된다. (이미 되어 있는 사람도 있고 아닌 사람도 있겠지만 해주지 않으면 글자가 깨질 수 있다.)
그럼 이제 시작해보자.
JDBC용 객체 종류
JDBC용 객체
- Connection : DB의 연결정보를 담고있는 객체
- [Prepared]Statement : 연결된 DB에 sql문을 전달해서 실행하고, 결과를 받아내는 객체
- ResultSet : SELECT문 실행 후 조회된 결과물을 담는 객체
사용법
JDBC 과정(순서중요)
1) JDBC Driver등록 : 해당 DBMS(오라클)가 제공하는 클래스 등록
2) Connection생성 : 연결하고자하는 db정보를 입력해서 해당 db와 연결할 수 있는 객체 생성
3) Statement생성 : Connection객체를 이용해서 생성(sql문 실행및 결과를 받는 객체)
4) sql문 전달하면서 실행 : Statement객체를 이용해서 sql문 실행
5) 결과받기 > SLSECT문 실행 (6-1) => ResultSet객체(조회된 결과를 담아준다) =>객체가 반환됨,
DML(INSERT, UPDATE, DELETE)문 실행(6-2) => int 형 반환됨
6-1) ResultSet객체에 담겨있는 데이터들을 하나씩 추출해서 차근차근 옮겨담기[+ArrayList에 담기]
6-2) 트랜잭션 처리(성공했다면 commit, 실패했다면 rollback 실행)
7) 다 사용한 JDBC용 객체를 반드시 자원 반납(close) => 생성된 역순으로
먼저 내 데이터 베이스와 연결 되었는지 DB의 테이블에 insert 시켜보자.
public static void main(String[] args) {
// 1.각자의 pc(localhost)에 jdbc계정 연결 후 test테이블에 insert 해보자
// insert => 처리된 행 수(int) => 트랜잭션 처리
//필요한 변수 세팅하기
int result = 0; //결과(처리된 행 수)를 받아줄 변수
Connection conn = null; // DB의 연결정보를 보관할 객체
Statement stmt = null; // sql문을 전달해서 실행 후 결과를 받는 객체
Scanner sc = new Scanner(System.in);
System.out.print("번호 : ");
int num = sc.nextInt();
sc.nextLine();
System.out.print("이름 : ");
String name = sc.next();
sc.nextLine();
// 실행할 sql문(완전한 상태로 만들어두기)(맨뒤에 세미콜론 없어야된다!!!!!!!!!)
String sql = "INSERT INTO TEST VALUES(" + num + ", '" + name + "', SYSDATE)";
try {
//1) JDBC Driver등록
Class.forName("oracle.jdbc.driver.OracleDriver"); // ojdbc6.jar 파일을 추가하지 않았을까 확인 | 오타 => 에러
System.out.println("OracleDriver 등록성공");
//2) Connection생성(url, 계정명, 비밀번호)
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "JDBC", "JDBC");
//3) Statement생성
stmt = conn.createStatement();
//4, 5) sql문 전달하면서 실행 후 결과 받기(처리된 행 수)
result = stmt.executeUpdate(sql);
// 내가 실행할 sql문이 dml(insert, update, delete)문 -> stmt.executeUpdate(sql문) : int
// 내가 실행할 sql문이 select문 -> stmt.executeQuery(select문) : ResultSet
//6) 트랜잭션 처리
if (result > 0) { // 요청 sql문 성공
conn.commit();
} else { // 요청 sql문 실패
conn.rollback();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
//7) 다쓴 jdbc용 객체 자원반납(생성과 역순으로)
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (result > 0) { // 요청 sql문 성공
System.out.println("데이터 삽입 성공");
} else { // 요청 sql문 실패
System.out.println("데이터 삽입 실패");
}
}
}
코드는 정형화 되있는 느낌이 있어서 그냥 사용법을 이해하고 외우는 느낌으로 진행하였다.
우리가 이해해야 할 것은 데이터가 어떻게 흘러가는지를 이해해야하고 사용법을 숙지하는 것이다.
sql에서 쿼리를 작성해주고 위 자바 코드를 실행시켜주면 잘 들어간 모습을 볼 수 있다 !
insert를 해줬으니 우리가 해야할 건 가져오는 것이다. ( select )
public class RunTest {
public static void main(String[] args) {
// 2. 내 pc db상에 jdbc계정에 TEST테이블에 모든 데이터 조회해보기
// select문 => 결과 ResultSet(조회된 데이터가 담겨있다) => ResultSet으로부터 데이터 추출
//필요한 변수들 세팅
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
//실행할 sql문 작성
String sql = "SELECT * FROM TEST";
try {
//1) JDBC Driver등록
Class.forName("oracle.jdbc.driver.OracleDriver"); // ojdbc6.jar 파일을 추가하지 않았을까 확인 | 오타 => 에러
System.out.println("OracleDriver 등록성공");
//2) Connection생성(url, 계정명, 비밀번호)
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "JDBC", "JDBC");
//3) Statement생성
stmt = conn.createStatement();
// 4, 5) SQL문 전달해서 실행 후 결과 받기 (ResultSet)
rset = stmt.executeQuery(sql);
// rset.next() => rest의 다음행이 들어있는지 없는지 확인 후 결과반환 + 한행을 내려줍니다
while(rset.next()) {
//현재 참조하는 rset으로부터 어떤 컬럼에 해당하는 값을 어떤타입으로 추출할건지 제시해줘야한다.
//db의 컬럼명 제시(대소문자 구분하지 않는다)
int tno = rset.getInt("TNO");
String tname = rset.getString("TNAME");
Date tdate = rset.getDate("TDATE");
System.out.println(tno + ", " + tname + ", " + tdate);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
rset.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
위 코드를 실행하면
이렇게 콘솔창에 INSERT 해주었던 값이 나오는 것을 볼 수 있다 !
MVC
M(Model) : 데이터 처리담당(데이터를 담기위한 클래스(VO), 데이터들이 보관된 공간(db)과 직접적으로 접근해서 데이터 주고받기(dao))
V(View) : 화면을 담당(사용자가 보게되는 시각적인 요소, 출력및 입력)
C(Controller) : 사용자의 요청을 처리해주는 역할
이렇게 3개로 분할 하여 진행한다.
View <-> Controller <-> Model 로 왔다 갔다 하는 느낌이다.
이제 지금까지 배웠던 것들을 응용하여 MVC 까지 (프론트는 VIEW 클래스로 대체) 하여 혼자 미니프로젝트를 하려고 한다.