반응형
1. JDBC
자바 어플리케이션에서 표준화된 방법으로 다양한 데이터베이스에 접속할 수 있도록 설계된 인터페이스
- 애플리케이션에서는 드라이버 관리자를 통해 필요한 데이터베이스 드라이버를 로드한 다음 해당 데이터베이스에 접속
- 응용 프로그램과 DBMS간의 통신을 중간에서 번역(DBMS의 종류에 상관 X)
JDBC Driver
- 실제 DB관련 기능이 동작하려면 java.sql의 인터페이스들을 상속하여 메서드의 몸체를 구현한 클래스파일들이 필요
- 이 파일들을 JDBC Driver라 부름
JDBC 프로그래밍 코딩 흐름
- JDBC 드라이버 로드
- DB연결
- Statement 생성
- SQL문 전송 & 결과받기
- 연결해제
1. JDBC 드라이버 로드
데이터베이스에 접속하려면 먼저 해당 데이터베이스의 JDBC 드라이버를 로드
JDBC 드라이버를 로드하는 방법
- jdbc.drivers
- System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
- 환경변수를 이용하는 경우 나중에 DriverManager 클래스가 초기화될 때 자동으로 해당 드라이버를 로드
- Class.forName() 메서드 사용(많이 사용)
- Class.forName("com.mysql.jdbc.Drivers");
- com.mysql.jdbc.Drivers -> Mysql의 JDBC 메인 클래스
- Class.forName("com.mysql.jdbc.Drivers");
2. DB연결
드라이버가 로드되면 해당 데이터베이스의 JDBC 드라이버를 이용해 프로그램을 작성할 수 있는 상태가 된 것을 의미
실제 데이터베이스와 연결하려면 Connection 클래스의 인스턴스가 필요
JDBC URL
jdbc:[DBMS]:[데이터베이스식별자]
jdbc:oracle:thin:@localhost:1521:xepdb1
- DBMS와의 연결을 위한 식별값
- JDBC 드라이버에 따라 형식이 다름
String url = "jdbc:oracle:thin:@localhost:1521:xepdb1"
Connection con = DriverManager.getConnection(url, "kim", "1234");
- DriverManager.getConnection(url, user, password)
- String url : 접속할 서버의 URL이며, 프로토콜, 서버주소, DB이름으로 구성
- String user : DB서버에 로그인할 계정
- String password : DB서버에 로그인할 비밀번호
DBMS별 JDBC driver명, URL 형식
1. Oracle
- Driver
- oracle.jdbc.driver.OracleDriver
- URL
- jdbc:oracle:thin:@HOST:PORT:SID
2. MS-SQL
- Driver
- com.microsoft.sqlserver.jdbc.SQLServerDriver
- URL
- jdbc:sqlserver://HOST:[:PORT];DatabaseName=DB
3. MySQL
- Driver
- com.mysql.jdbc.Driver
- URL
- jdbc:mysql://HOST[:PORT]/DBNAME[?param=value¶m1=value2&..]
3. Statement 생성
자바프로그램은 DB쪽으로 SQL문을 전송하고, DB는 처리된 결과를 다시 자바프로그램 쪽으로 전달
데이터베이스 연결로부터 SQL문을 수행할 수 있도록 해주는 클래스
Statement stmt = con.createStatement();
4. SQL문 전송, 결과 받기
Statement 객체를 이용해 DB서버로 SQL문을 전송하고 처리결과를 받아옴
- ResultSet executeQuery(String sql)
- select 문 수행 시 사용
- 메서드가 반환하는 반환값인 ResultSet은 select문을 실행한 후의 결과값을 가지고 있음
- int executeUpdate(String sql)
- SQL문이 실행된(update, delete, insert) 후 영향받은(처리된) 레코드(데이터)의 개수를 반환
...
Statement stmt = con.createStatement();
String sql = "insert into test values(' "+request.getParameter("username")+" ',
'"request.getParmaeter("email")+" ')";
ResultSet rs = stmt.executeUpdate(sql);
※ ResultSet
- executeQuery()메서드에서 실행된 select 문의 결과값을 가지고 있는 객체
- ResultSet 객체의 메서드를 활용해 추출해서 select 결과값을 사용
- ResultSet 객체는 내부적으로 위치를 나타내느 커서(Cursor)가 존재
- Boolean next() 메서드는 커서 다음 레코드가 있는지 판단하여 없으면 false, 있으면 true 반환 후 커서를 다음 레코드(데이터)로 이동
- ResultSet 객체는 현재 커서의 컬럼의 값을 데이터 타입에 따라 추출하는 getter 메서드를 가지고 있음
- getter 메서드의 인자값으로는 칼럼의 이름이나 인덱스(결과값으로 나타난 칼럼의 순서) 값을 지정
...
while(rs.next()){
int id = rs.getInt("ID");
String title = rs.getString("TITLE");
String writer = rs.getString("WRITER_ID");
Date regDate = rs.getDate("REGDATE");
}
- PreparedStatement
- SQL문을 미리 만들어 두고 변수를 따로 입력하는 방식
- 효율성, 유지보수에 용이
- Statement 클래스 상속
- SQL문에서 변수가 와야할 위치에 ?만 적어두고 ?자리에는 setXxx()메서드로 값을 설정(Xxx = 자료형)
...
PreparedStatement pstmt = con.prepareStatement("insert into test values(?,?)");
pstmt.setString(1, request.getParameter("username");
pstmt.setString(2, request.getParameter("email");
pstmt.executeUpdate();
5. 연결(메모리) 해제
Statement, PreparedStatement 는 사용하지 않을 때 닫아줘야 함.
...
rs.close();
stmt.close(); //pstmt.close();
con.close():
- 해체 순서는 최근에 사용했던 객체부터 거꾸로 올라가며 해제
반응형
'Spring' 카테고리의 다른 글
JDBC - DBMS 조작 기본 지식, SELECT (0) | 2022.05.21 |
---|---|
JDBC - DataSource를 이용한 데이터 연결 (0) | 2022.05.20 |
Spring 데이터로 작업하기 3 (0) | 2022.05.18 |
Spring 데이터로 작업하기 2 (0) | 2022.05.18 |
Spring 데이터로 작업하기 1 (0) | 2022.05.18 |