JDBC (Java Databse Connectivity)
- JAVA 프로그램이 Database와 연결 되어 데이터를 주고 받을 수 있게 해주는 프로그래밍 인터페이스로 응용 프로그램과 DBMS간의 통신을 중간에서 번역해주는 역할.
JDBC를 활용한 DBMS 연결
프로젝트 내 연동
- DB 접속 정보를 준비
- 추가한 라이브러리 드라이버를 불러온다.
- 드라이버 매니저를 불러 접속 정보를 준다.
- 드라이버 매니저가 가져온 컨넥션을 받는다.
- Connection을 이용하여 데이터를 처리하고 자원을 반납한다.
// DB 접속 메서드
public class HomeDAO {
// db 접속 성공/실패 여부를 확인할 수 있도록 반환값을 설정
public String dbConnection() {
System.out.println("DB 접속 시도");
// 1. DB 접속 정보 받기 (DB 접속시 필요한 정보와 동일)
String host = "jdbc:mariadb://localhost:3306";
String username = "web_user";
String password="pass";
String msg = "DB접속에 실패하였습니다. ";
// 2. 사용하는 드라이버 라이브러리
// "mariadb 라이브러리"와 같이 검색하면 찾을 수 있다.
String driver = "org.mariadb.jdbc.Driver";
// 3. 1,2 정보 제공을 위해 드라이버 매니저 부르기
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(host,username,password);
System.out.println(conn);
if(conn != null) {
msg="DB접속에 성공하였습니다. ";
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return msg;
}
}
Connection Pool을 이용한 연결
- 동시에 사용자가 접근할 때 동시에 사용할 수 있도록 Connection Pool을 사용할 수 있다.
- Common dbcp 라이브러리 추가
- Server 폴더 내 Context.xml의 Resource 속성 추가
<Resource
name="jdbc/MariaDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.mariadb.jdbc.Driver"
url="jdbc:mariadb://localhost:3306/mydb"
username="web_user"
password="pass"
/>
-
- Context.xml을 객체로 가져온다.
- 이때 Context는 인터페이스이므로 초기화가 불가능하다. 따라서 다형성에 따라 인터페이스를 구현한 InitContext를 객체화하여 사용한다.
-
- Resource에서 name으로 원하는 부분을 찾아(lookup) 가져온다.
-
- 가져온 정보를 이용하여 Connection을 생성한다.
-
- Connection을 이용하여 데이터베이스를 처리한다.
-
- 자원 반납
public class PoolDAO {
public String dbConnection() {
String msg = "DB 접속 실패";
//context.xml에서 데이터를 어떻게 꺼내 올 것인가
try {
// 1. context.xml을 자바 객체화 시킨다.
Context ctx = new InitialContext();
// 2. Resource를 찾아온다. (name을 사용)
// 3. 이 내용을 DataSource 객체로 변환 한다.
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/MariaDB");
// 4. 컨넥션을 받아온다.
Connection conn = ds.getConnection();
System.out.println(conn);
if (conn != null) {
msg = "DB 접속 성공";
// 자원 반납
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return msg;
}
}
JDBC QUERY
- 데이터 베이스의 데이터를 처리하기 위한 Query문을 실행하기 위해 Connection은 두가지 방법을 제공해 준다.
Statement 객체
- 쿼리문을 실행
- 일반적으로 한번 실행 된 뒤 재사용할 일이 없는 경우 (CREATE, DROP 등)에 사용한다.
Prepared Statement 객체
- 쿼리문을 실행할 때 '?' 를 사용항 다양한 대응이 가능하다.
- 문장을 컴파일 후 재사용하기 때문에 여러번 반복 될 때 유리하며 성능과 속도 면에서 우수하다.
executeQuery() 메서드
- 반환되는 데이터가 있는 (SELECT 등) 경우 사용하며 반환 타입은 ResultSet형태이다.
executeUpdate() 메서드
- DB 데이터에 변화를 줄 경우 (UPDATE, DELETE, INSERT)에 사용하며 반환값은 변경이 적용된 데이터 행의 갯수이므로 int 타입이다.