일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- java입문
- arraylist
- 필드
- 배열
- 이클립스
- 오버라이딩
- 맨땅에 해딩
- emmet
- html
- Git이해하기
- list
- Git알아보기
- javascript
- CSS
- Collection
- jdbc
- 점프 투 파이썬
- object
- 데이터베이스연동
- cmd
- js
- 버튼페이지이동
- java
- MySQL
- form
- 기본코드
- Eclipse
- 파일이동버튼
- java기초
- 컬렉션프레임워크
- Today
- Total
단단히
JDBC란? (이클립스 + MySQL) 본문
JAVA와 DB를 연결을 배웠다.
이해가 갈듯하지만 이해하지 못했다.
한 번은 정리해야 이해할 수 있을 거 같다.
한 번에 새로운 용어와 구문들이 나와 정리를 해본다.
JDBC란?
자바 프로그램 안에서 SQL을 실행하기 위해 데이터베이스와 연결해주는 응용 프로그램 인터페이스를 말한다.
※인터페이스란? 사물과 사물 사이 또는 사물과 인간 사이의 경계에서 상호 간의 소통을 위해 만들어진
물리적 매개체나 프로토콜을 말한다.
즉, 자바와 데이터베이스(MySQL)를 연결해 자바에서 SQL 쿼리를 실행할 수 있도록 해주는 응용프로그램이다.
이때 데이터베이스에 있는 Driver라는 것을 통해 하고 있다.
JDBC 코드를 작성할 때 Class.forName을 통해 경로를 적는데, 이때 이 Driver 경로를 적어 연결하는 것이다.
즉, 이후 DB 자체를 바꾸는 일이 생긴다면, 이 경로만 변경하면 된다.
2022.09.30 - [DataBase/개념 정리] - DB(MySQL) 실행창에서 바로가기 만들기 + Driver.class 파일 위치
전반적인 JDBC 과정
JDBC 코드를 작성하면 여러 객체 들이나 온다. 전반적으로 객체들을 확인해보고 살펴보자.
필수로 등장하는 객체들은 DriverManager / Connection / Statement / ResultSet이다.
위에서 Driver경로는 Class.forName을 통한다고 했다. 이때 Driver를 관리해주는 역할이 필요하다.
DriverManager가 그 역할을 하는데, 위에서 말했듯 DataBase에 접속을 해야 하니깐 DB에 들어갈 수 있는 ID와 PW가 필요하다.
연결이 되었다면 자신이 원하는 SQL 쿼리문을 넣어(Statement) 줘야 하는데 이때 쿼리 문의 결과를 받아와야 하는 객체(ResultSet )도 필요하다.
이때 사용하고 싶은 쿼리문에 따라 사용하는 객체가 다르다.
많지 않고 딱 두 가지로 나뉘는데,
DB 쿼리 (결괏값의 리턴 유무)
# select 구문(이외 조회문_Show)을 사용하고 싶다.
>>Statement와 그 결괏값을 받는 ResultSet이 필요하다.
>> 또한 쿼리 실행은 executeQuery()로 받아준다.
; 즉, 특정 데이터를 선택한다면 선택 값이 생긴다. 그 선택한 DATA들을 ResultSet으로 받는 것이다.
'선택 값이 생긴다'의 선택 값이란 내가 조건문 등을 사용해서 필터링한 DATA들을 의미한다.
# insert, delete , alter.. 등 구문을 사용하고 싶다.( select 구문을 제외한 구문)
>> PreparedStatement를 사용한다.
>> 쿼리 실행은 executeUpdate()로 실행시킨다.
JDBC 기본적인 구성과 예외처리, 그 이유
클래스를 만든다. 그리고 메서드를 생성하고 그 안에다가 연결할 것이다.
public 반환자료형 메서드명() {
}
메서드를 만든다는 것은 각각의 메서드마다 연결할 DB가 다를 수도 있고 연결할 객체마다 실행이 다르다는 것. 여러 개를 만들 수 있다.
JDBC 연결을 할 때 예외처리(try-catch문)를 사용한다. 즉, checked exception 구문이라는 것이다.
try{
...
}catch(예외명1){
예외처리1;
}catch(예외명2){
예외처리2;
}
2022.05.22 - [Java/개념 정리] - 예외처리
그 이유는 예외(처리할 수 있는 오류)가 발생했을 때 프로그램의 종료를 막고
정상적으로 프로그램의 실행 상태를 유지시키지 위해서이다.
변수 및 객체_ 연결과정 ( select )
먼저 많이 사용하는 객체를 우선 선언한다.
Connection objConn = null;
Statement objStmt = null;
ResultSet objRS = null;
◆ Class.forName( "Driver 경로" );
어떤 종류의 DB를 사용할 건지, 사용할 DB의 Driver 경로를 설정해준다.
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Class.forName( "Driver 경로" ); 를 통해 정적 로딩을 해준다.
동적 로딩? 실행할 때, 필요한 기능만 동적으로 메모리를 생성한다. 필요 없는 메모리는 자동으로 소멸시킨다.
장점은 필요한 기능만 메모리에 불러오기 때문에 큰 프로그램도 작은 메모리에서 실행이 가능하다.
단점은 불러오는 시간이 발생하기 때문에 실행 속도가 느려진다.
정적 로딩? 프로그램을 실행할 때, 모든 실행파일이 메모리에 로드된다.
모든 기능이 이미 불러와져 있어, CPU가 필요로 하는 기능을 빠르게 메모리에 가져와 사용할 수 있다.
단, 메모리를 많이 차지한다.
static 키워드로 선언된 자원들은 인스턴스화 과정 없이 실행 가능한 형태로 메모리에 생성된다.
static로 선언된 모든 자원들은 클래스 로딩 시에 생성되고, JVM이 종료되면 값은 메모리에서 소멸된다.
이클립스에서 글자가 기울어져있다면 그건 정적인 저장공간에 저장되어있다는 것을 의미한다.
즉, 실행하는 순간에 가장 먼저 로딩된다.
정적인 저장공간에 저장이 돼있다는 건 객체를 별도로 생성하지 않아도 사용이 가능하다는 의미이다.
◆ DriverManager.getConnection(url, user, password) ;
어떤 DB(스키마)를 사용할 것인지 위치를 알려준다.
String url = "jdbc:mysql://localhost:3306/ DB명 ?";
url += "useSSL=false&";
url += "useUnicode=true&";
url += "characterEncoding=UTF8&";
url += "serverTimezone=UTC";
String user = "root";
String password = "1234";
objConn = DriverManager.getConnection(url, user, password);
이제 위에서 잠깐 설명했던 Driver관리자에게 연결 정보를 넘겨줄 것이다.
url : 어떤 어떤 DB와 연결을 할 것인지 위치를 알려준다.
알려줌과 동시에 기본적인 옵션들을 세팅해준다.
줄이 너무 길어져서 연결해준다.
localhost는 내 컴퓨터의 ip주소의 키워드이다.
user : DB를 설치할 때 정했던 들어갈때 DB ID를 적어준다.
password : DB를 설치할때 정했던 DB 들어갈 때 사용하는 비밀번호를 적어준다.
위와 같이 연결해주는 DriverManager를 상단의 Connection 변수인 objconn에 담아준다.
◆ objConn.createStatement();
objStmt = objConn.createStatement();
위에서 objconn 변수에 사용할 DB Driver와 사용할 특정 DB(스키마)를 선택해 연결해줬다.
이제는 '연결된 스키마에 내가 원하는 문장을 만들어줄래?'라고 입력해주는 것이다.
'입력해줄래?'라는 문장을 objStmt라는 변수에 넣어준다.
◆ objStmt.executeQuery(sql);
String sql = "select 칼럼명1, 칼럼명2, 칼럼명3, ... ";
sql += " from 테이블명 [ 조건절 ] order by num desc";
objRS = objStmt.executeQuery(sql);
//insert문과 같이 그저 쿼리 실행만 하는 경우는
//objRS = objStmt.executeUpdate(sql);
적고 싶은 select 쿼리문을 넣어준다.
나는 sql select문이 너무 길어서 따로 빼줬다.
objStmt변수에는 DB와 연결 정보들과 '원하는 문장(=쿼리) 연결해줄래?'라는 문구가 들어가 있다.
이 objStmt 변수에 내가 원하는 sql 문장을 넣는 것이다.
※ 이렇게 sql 구문을 나눠서 대입할 때는 띄어쓰기를 잘 확인해야 한다.
여기서부터는 위에서 말한 대로 원하는 쿼리 구문에 따라 달라진다.
일단 여기서는 공통되는 부분을 작성할 것이다.
DB 쿼리 (결괏값의 리턴 유무)
# select 구문(이외 조회문.. Show)을 사용하고 싶다.
>> Statement와 그 결괏값을 받는 ResultSet이 필요하다.
>> 또한 쿼리 실행은 executeQuery() 로 받아준다.
; 즉, 특정 데이터를 선택한다면 선택 값이 생긴다. 그 선택한 DATA들을 ResultSet으로 받는 것이다.
'선택 값이 생긴다'의 선택 값이란내가 조건문 등을 사용해서 필터링한 DATA들을 의미한다.
# insert, delete , alter.. 등 구문을 사용하고 싶다.( select 구문을 제외한 구문)
>> PreparedStatement를 사용한다.
>> 쿼리 실행은 executeUpdate()로 실행시킨다.
◆ 객체명. close();.close();
사용한 객체들을 닫아주는 것이 좋다.
objRS.close();
objPstmt.close();
objStmt.close();
objConn.close();
이때 닫아주는 것을 '반납'이라고 하는데, 자원을 반납할 때는 열었던 순서의 반대(역순)로 닫아준다.
원래는 try - catch - finally구문의 finally부분에서 if문을 사용해서 닫아줘야 하는데,
자바 버전 업그레이드로 try부분에서 바로 삭제할 수 있다.
만약 select구문일 경우엔 objPstmt와 conn만 반납한다.
(반납이 필수는 아니다)
◆ catch 구문
모든 예외와 관련된 클래스는 Exception 클래스를 상속받는다.
} //try구문 닫아주고
catch (ClassNotFoundException cnfe) {
out.print(cnfe.getMessage());
} catch (SQLException sqle) {
out.print(sqle.getMessage());
}
2022.05.22 - [Java/개념 정리] - 예외처리
반환 값(조회문)이 있는 쿼리 문과 반환 값이 없는 쿼리문은 JDBC 코드의 차이가 존재한다.
JDBC코드는 try - catch문이 필수인 checked exception 문이다.
JDBC란 자바와 DB를 연결해주는 응용프로그램 인터페이스이다.
DriverManager / Connection / Statement 등 공통적으로 실행되는 구간이 있다.
'---------------------------------------- > JDBC' 카테고리의 다른 글
JDBC _ 반환값이 있는 경우 ( ; 조회문 select / show .. ) (0) | 2022.10.12 |
---|