개발 등/중급

JDBC의 기본 클래스들

darkhorizon 2008. 9. 23. 15:14
728x90
반응형
1. Connection Interface
 : 데이터베이스에 접속하기 위한 인터페이스.
     Connection 객체를 얻기 위해서는 DriverManager 클래스의 getConnection()를 호출해야 한다.

예)
Class.forName("oralce.jdbc.driver.OracleDriver");   // 데이터베이스 드라이버를 메모리에 로딩String url="jdbc:oracle:thin:@localhost:1521:orcl";   //데이터베이스의 위치
String id="scott";   String pw="tiger";   //유저 아이디와 비밀번호
Connection conn=DriverManager.getConnection(url,id,pw);
2. Statement Interface
 : SQL문을 실행하고 그 결과를 리턴받기 위한 인터페이스다.
    Statement 객체를 얻기 위해서는 Connection 객체의 createStatement()를 호출해야 한다.
실행 메서드는 executeQuery(), executeUpdate() 두 개의 메서드가 있다.
executeQuery() ==> select 문을 이용해서 ResultSet 객체를 받아올 때 실행한다.
executeUpdate()==> select 문을 제와한 SQL명령문을 실행한다.

예)
Statement stmt=conn.createStatement();   // Statement 객체 생성
String sql="create table member(id varchar2(20), pw varchar2(20))";
stmt.executeUpdate(sql);   //SQL문 수행

3. ResultSet Interface
 : exectueQuery()메서드의 SQL문이 실행된 결과의 데이터를 받기 위한 인터페이스.
    ResultSet은 최초 테이블의 텃 행에 커서를 유지하는 기능이 있다.
next() 메서드를 사용하면 다음 행으로 커서를 이동하고, 더 이상의 데이터가 없을 때는 false를 리턴한다.
getter 메서드(getString(), getInt()) 등을 이용해서 각 칼럼의 데이터값을 가져올 수 있다.

예)
ResultSet RS=stmt.executeQuery("select * from emp");     // emp 테이블의 데이터를 가져오는 ResultSet  객체 생성
while(RS.next()){          // next()를 이용해서 가져온 테이블의 각 행으로 커서를 이동한다.
     String a=RS.getString(2);     //커서가 이동할 때마다 2번째 칼럼의 데이터를 변수 a에 대입한다
System.out.println(a);
}

4. ResultSetMetaData Interface
 : ResultSet객체에서 얻어온 테이블의 각 칼럼에 대한 형태와 타입을 읽기 위한 인터페이스.
    ResultSet의 getMetaData() 메서드를 통해 객체를 생성할 수 있으며, 대표적인 메서드로는
테이블의 칼럼 수를 가져오는 getColumnCount()와 칼럼 이름을 가져오는 getColumnName()가 있으며 리턴타입은 각각 int와 String이다.

예)
  Vector<String> value=new Vector<String>();        // 각 칼럼명을 받아올 변수 선언
ResultSetMetaData rsmd=RS.getMetaData();    //객체 생성
for(int i=1; i<=rsmd.getColumnCount(); i++){         // 해당 행의 칼럼 수 만큼
    value.add(RS.getColumnName(i));                   /// 칼럼의 데이터값을 읽어온다.
}


5. PreparedStatement Interface
: Statement 가 하나의 SQL명령문을 한번 실행하고 나서 동일한 형태의 SQL문을 실행하기 위   해서는 다시 SQL명령문을 생성한 뒤 SQL문을 처리하는데 비해서, PreparedStatement는 위치표시자인 물음표(?)를 이용해서 반복적인 SQL문 처리가 가능하다.
비교)
Statement stmt=conn.createStatement();
String sql1="insert into member values('park1','1111')";
stmt.executeUpdate(sql1);
String sql2="insert into member values('park2','2222')";
stmt.executeUpdate(sql2);

예)
String sql="insert into member values(?,?)";      // 각 칼럼에 들어갈 값을 위치표시자로 설정
PreparedStatement ps=conn.prepareStatement(sql);     //객체 생성
ps.setString(1,"kim1");             // 첫번째 위치표시자에 "kim1"을
ps.setString(2,"1111");            // 두번째 위치표시자에 "1111" 대입
ps.executeUpdate();                // 실행문을 업데이트한다.
ps.setString(1,"kim2");             // 다시 반복
ps.setString(2,"2222");
ps.executeUpdate();




   
728x90