JDBC간단한 사용법
JDBC
자바의 데이터베이스 조작 인터페이스
java.sql.* 클래스
데이터베이스의 종류와는 무관한 인터페이스 정의만을 담고 있다.
java에서 제공하는 JDBC API를 사용하기 위해서는 개별 데이터베이스에 맞게 구현된 드라이버가 있어야 한다.
1 import java.sql.*;
2 import java.lang.*;
3
4 public class Test {
5 public static void main(String[] args) {
6 // 드라이버 로딩
7 try {
8 Class.forName("myDriver.ClassName");
9 } catch (ClassNotFoundException e) {
10 System.err.println("Class Not Found : " + e.getMessage());
11 }
12
13 try {
14 // 데이터베이스 접속
15 String url = "jdbc:myprotocol:mydatabase";
16 Connection db =
17 DriverManager.getConnection(url, "myid", "mypassword");
18
19 // SQL문 수행
20 Statement stmt = db.createStatement();
21 ResultSet rs = stmt.executeQuery("SELECT id FROM member");
22
23 .......
24
25 } catch (SQLException e) {
26 System.err.println("SQL Error : " + e.getMessage());
27 }
28 }
29 }
Class.forName("myDriver.ClassName"); 에서 인자로 자신이 사용하는 데이터베이스가 제공하는 드라이버의 이름을 넣는다. mysql의 경우 "org.gjt.mm.mysql.Driver" 을 넘긴다.
데이터베이스의 접속
Connection클래스(java.sql.connection)
SQL 사용하기
1. Statement 클래스
connection개체의 createStatement()매소드로 Statement 개체 생성
executeQuery() -> SELECT와같은 결과값이 있을때 사용
executeUpdate() -> INSERT, UPDATE와 같은 결과 값이 없을때 사용
결과는 ResultSet 개체로 받는다.
2. PreparedStatement 클래스
속도향상을 위해 같은 구문의 쿼리를 날릴때 사용한다.
try {
14 // 데이터베이스 접속
15 String url = "jdbc:myprotocol:mydatabase";
16 Connection db =
17 DriverManager.getConnection(url, "myid", "mypassword");
18
19 // SQL문 수행
20 PreparedStatement stmt = db.prepareStatement(
21 "SELECT name FROM member WHERE id = ?");
22 stmt.setString(1, "me");
23 ResultSet rs = stmt.executeQuery();
24
25 .......
26
27 stmt.setString(1, "you");
28 rs = stmt.executeQuery();
29 .......
30
31 } catch (SQLException e) {
32 System.err.println("SQL Error : " + e.getMessage());
33 }
인자값만을 변경하여 명확하게 사용할수 있는 장점이 있다.
3. ResultSet 클래스
구문을 통해 얻어지는 결과를 저장하는 클래스. 포인터인 Cursor로 현재의 tuple을 알수 있다.
next(), previous(), first(), last()
while (rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(name + ":" + age);
}
Close로 닫기
Java는 메모리관리를 garbage collection이 알아서 하지만 JDBC와 같은 외부지원의 드라이버에 대해서는 생성된 객체를 코드내에서 소멸시키도록 권장한다.
close()매소드를 이용하여 각각의 객체를 소멸시킨다.
stmt.close();
rs.close();
db.close();
About Performance
데이터베이스 수행중 가장 성능에 영향을 미치는 것은 접속과 해제이다.
Connection개체로 데이터베이스에 접속하는것은 매우 Heavy한 일이므로 클라이언트가 접속할때마다 데이터베이스에 접속하는것은 피해야한다. 이를 위해 데이터베이스 접속을 pool로 관장하는 방법이 일반적이고 J2EE기반이라면 javax.sql.* 클래스를 사용하여 구현할수 있다.