○ JDBC 프로그래밍
JDBC(Java DataBase Connectivity)는 자바 프로그램에서 데이터베이스와 연결하여 데이터 베이스 관련 작업을 할 수 있도록 해주는
자바 프로그래밍 인터페이스를 위한 API(Application Programming Interface) 규격이다
JDBC는 Driver, DriverManager, Connection, Statement, PreparedStatement, ResultSet, ResultSetMetaData, DatabaseMetaData, Types, DataSource 등 여러 개의 클래스와 인터페이스로 구성된 페이지 java.sql과 javax.sql로 구성되어 있다
JDBC는 다음과 같은 데이터 베이스 기능을 지원하기 위한 표준 API를 제공한다
- 데이터 베이스를 연결하여 테이블 형태의 자료를 참조
- SQL 질의
- SQL 질의 결과를 처리
○ JDBC의 역할
ODBC는 JDBC보다 먼저 마이크로소프트 회사가 개발한 것으로 C 또는 C++ 등의 언어를 이용하여 DBMS에 독립적으로
데이터 베이스 프로그램을 가능하도록 하는 API 규격이다
JDBC도 ODBC와 마찬가지로 DBMS의 종류에 상관없이 쉽게 SQL문을 수행하고 그 결과를 처리할 수 있도록 설계되어 있다
DBMS에 독립적인 프로그램이 가능하도록 하려면 JDBC와 함께 JDBC Driver도 필요하다
○ JDBC Driver 종류
JDBC Driver는 JDBC 인터페이스에 맞추어 해당 DBMS에서 JDBC 관련 API 호출이 가능하도록
관련 인터페이스와 클래스를 구현한 클래스 라이브러리이다
- JDBC-ODBC 브릿지 드라이버
- Native API 드라이버
- Net-Protocal 드라이버
- Native-Protocal 드라이버
○ JDBC 프로그래밍 절차
1) JDBC 드라이버 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
//OracleDriver의 객체를 만들어 주는 역할을 한다. 데이터베이스와 자바를 연결해주는 역할을 한다
//Class 클래스 : 클래스의 정보를 얻기 위한 클래스이다
=>
인터페이스 드라이버(Interface Driver)를 구현(Implements)하는 작업으로,
Class 클래스의 forName() 메소드를 사용해서 드라이버를 로드한다
forName(String className) 메소드는 문자열로 주어진 클래스나 인터페이스 이름을 객체로 리턴한다
2) 데이터베이스 연결
String dbURL = "jdbc:oracle:thin:@localhost:1521:ORCL";
Connection con = DriverManager.getConnection(dbURL, "scott", "tiger");
//dbURL : 오라클 서버의 URL
//서버와 연결해주는 역할을 하는 DriverManager의 getConnection 메소드를 통해 매개변수로
서버 주소와 아이디, 비밀번호를 넘겨주어 연결한다
=>
Connection 객체를 연결하는 것으로 DriverManager에 등록된 각 드라이버들을 getConnection(String url)메소드를 사용해서 식별한다
이때 url 식별자와 같은 것을 찾아서 매핑(mapping)하고 찾지 못하면 no suitable error가 발생한다
3) SQL을 위한 Statement 객체 생성
PreparedStatement pstmt = null;
String sql = "실행할 sql문";
pstmt = con.prepareStatement(sql);
-> String sql = "select * from student where name like ?";
pstmt.setString(1, name);
//첫번째 ?에 name을 대입한다
//?가 여러 개일 때 위치에 따라 지정한다(sal >= ? AND sal <= ? → 1번, 2번)
//이걸 가능하게 해주는 것이 PreparedStatement이다
Statement stmt = null;
stmt = con.createStatement();
//PreparedStatement 클래스는 sql문을 실행시켜 주는 역할을 하는 클래스이다
//연결한 객체를 통해 prepareStatement() 메소드에 접근하여 담긴 sql문장을 대입한다
//prepareStatement(), createStatement() : 데이터베이스로 쿼리를 담아서 전송할 수 있는 메소드
=>
SQL 쿼리를 생성/실행하며, 반환된 결과를 가져오게 할 작업 영역을 제공한다
Statement 객체는 Connection 객체의 createStatement() 메소드를 사용하여 생성된다
4) SQL 문장 실행
ResultSet result = pstmt.executeQuery();
ResultSet result = stmt.executeQuery("select * from student");
=>
Statement 객체가 생성되면 Statement 객체의 'executeQuery()' 메소드나 'executeUpdate()' 메소드를 사용해서 쿼리를 처리한다
=>
String sql = "update table set password = '0529' where id = 'Tony'";
stmt.executeUpdate(sql);
● 객체 Statement에서 SQL 질의 문장을 실행하는 메서드
메소드 종류 | 반환 자료형 | 특징 |
---|---|---|
executeQuery() | ResultSet | SELECT와 같이 데이터베이스에 변경을 주지 않는 SQL 문장을 실행할 때 사용하며 그 결과로 ResultSet 객체를 반환 |
executeUpdate() | int | INSERT, UPDATE, DELETE와 같이 데이터베이스 구조 또는 값을 변경시키는 질의(DML), CREATE, DROP과 같은 DDL 구문을 사용할 때 사용한다 질의 수행 후 영향을 받은 행의 수를 정수로 반환한다 |
execute() | boolean | 실행할 SQL문이 어떠한 종류의 것인지 모를 경우에 사용한다 결과가 ResultSet이면 true, 결과가 행의 수 이거나 없으면 false를 반환한다 |
5) 질의 결과 ResultSet 처리(executeQuery()를 할 때만 필요)
while(result.next()) {
String col1 = result.getString(1);
....;
}
=>
executeQuery() 메소드는 결과로 ResultSet을 반환하는데 이 ResultSet으로부터 원하는 데이터를 추출하는 과정을 말한다
- 데이터를 추출하는 방법은 ResultSet에서 한 행씩 이동하면서 get...()를 이용하여 원하는 필드 값을 추출하는데,
이때 rs.getString("name") 혹은 rs.getString(1)을 사용한다 (필드명을 쓰거나 칼럼 순서대로 숫자를 쓰거나)
- ResultSet의 첫 번째 필드는 1부터 시작한다
- 한 행이 처리되고 다음 행으로 이동 시 next() 메소드를 사용한다
while(rs.next()) {
out.println(rs.getString("id");
out.println(rs.getString("password");
}
6) JDBC 객체 연결 해제
result.close();
pstmt.close();
con.close();
'JSP' 카테고리의 다른 글
Statement와 PreparedStatement (0) | 2020.07.08 |
---|---|
Connection Pool (0) | 2020.07.08 |
Session과 Cookie (0) | 2020.07.04 |
page와 pageContext 내장 객체 (0) | 2020.07.03 |
config와 application 내장 객체 (0) | 2020.07.03 |