국비학원에서 배운 내용을 복습하는 중이다. 학원에서 진도나가면 키보드 따라치기 급급해서 주말이라도 혼자 공부하는 습관을 들여야 한다.
주중에 배운 내용중에 이클립스와 오라클을 연결하기 위해 JDBC를 설치하고 환경설정 하는 것을 했었다. 내 기억으론 이클립스 창에 DB를 연결해주는 java 코드를 연결하고, sql문을 만들어서 실행시키면 DB 내용을 조회 할 수 있었다. 매우 멋지다고 생각한다. sql developer가 아직 익숙하지 않는 나에게는 이클립스 IDE를 사용하는게 더 편하기 때문이다.
JDBC가 뭐지? [ https://dyjung.tistory.com/50 ]
jdbc란 자바에서 DB 프로그래밍을 하기 위해 사용되는 API이다. 그리고 놀랍게도 DBMS의 종류에 상관없다고 한다.
구성을 보면
자바(웹)어플리케이션 ㅡ JDBC API ㅡ JDBC 드라이버 ㅡ 데이터베이스 순으로 연결되어 있다.
순서
1) JDBC 드라이버 로드
2) DB연결
3) DB에 데이터를 읽거나 쓰기 (SQL문)
4) DB 연결 종료
JDBC 드라이버
- DBMS와 통신을 담당하는 자바 클래스
- DBMS 별로 알맞은 JDBC 드라이버 필요
- 로딩코드: Class.forName("JDBC드라이버 이름")
오라클: oracle.jdbc.driver.OacleDriver
JDBC URL
- DBMS와의 연결을 위한 식별 값
- JDBC 드라이버에 따라 형식이 다름
- 구성 : jdbc:[DBMS]: [데이터베이스식별자]
Oracle: jdbc:oracle:thin:@HOST:PORT:SID
저기서 패스워드 문자열을 일부러 틀린걸로 해보니 "오라클 연결 실패"가 출력이 되더라.
Class.forName 밑에 jdbc drvier 로딩 성공이라는 출력문이 있는걸 보니, Class.forName은 jdbc driver 로딩을 담당하는 역할로 유추했다.
getConnection
[ https://kimsaemjava.tistory.com/66?category=334222 ]
1) static 메소드이므로 클래스 이름을 이용해서 호출한다.
2) throws 하고 있는 SQLException은 Exception의 하위 클래스이므로 Exception에 대한 처리를 해야한다.(try~catch 이용)
3) 매개변수로 전달하는 접속문자열을 보며 어떤 DBMS에 연결해야 하는지 판단한다. 이는 제조사 홈페이지에서 확인
ex) 오라클의 경우 jdbc:oracle:thin:@ip:port:데이터베이스서비스명
4) 리턴타입은, java.sql.Connection이 리턴 connction은 인터페이스로 정의 되어있다. 내부에서는 어떤 DBMS를 사용하느냐에 따라 달라질 수 있도록 다형성이 적용되어 있다.
SQL developer 을 실행시키고 테이블을 하나 만들어주자. 그리고 이클립스에서 SQL문을 작성후 실행하여 데이터가 실제로 들어가는지 확인해보자.
create table tb_board(
boardNum number(10) primary key,
id varchar2(20),
title varchar2(20),
content varchar2(20),
write_date date,
hit number(10)
);
create sequence board_seq;
select * from tb_board;
아래는 이클립스 코드
package webTest01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class DBconn {
/**
* @param args
*/
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "nowon";
String password = "1234";
String sql = "update tb_board ";
sql = sql + "set title = 'statement테스트' ";
sql = sql + "where boardNum = 2";
//"insert into tb_board values(board_seq.nextval,'kang','jdbc테스트','Insert테스트',sysdate,0)";
try {
// driver 로딩
Class.forName(driver);
System.out.println("jdbc driver 로딩 성공");
// DB와 연결
Connection con = DriverManager.getConnection(url, user, password);
System.out.println("오라클 연결 성공 "+con);
Statement stmt = con.createStatement();
System.out.println(stmt);
int result = stmt.executeUpdate(sql);
System.out.println(result +"개 행이 삽입 성공..");
} catch (ClassNotFoundException e) {
System.out.println("jdbc driver 로딩 실패");
} catch (SQLException e) {
System.out.println("오라클 연결 실패");
}
}
}
아래는 이클립스 실행 결과이다.
아래는 SQL Developer의 tb_board 테이블의 출력결과 이다.
즉, 이클립스에서 SQL문을 작성하여 DB의 데이터를 직접 조작하는게 가능하다. DBMS의 기능과 java의 기능을 둘다 활용하고 데이터를 주고 받으며 데이터를 처리를 해줄 수 있기 때문이다. 국비강의에서는 주된 데이터 처리는 DBMS에서 다 가공을 한다고 했고, java는 이미 가공된 데이터를 어떻게 사용자에게 전달할지 전체적인 틀을 짜는데 사용된다고 하셨다.
'Java' 카테고리의 다른 글
2차원 배열 예제 (0) | 2022.08.29 |
---|---|
배열, for 문 예제 (0) | 2022.08.29 |
If 문, If else , Switch 를 활용한 예제 (0) | 2022.08.29 |
자바 환경설정 (0) | 2022.08.29 |