카테고리 없음

jdbc 사용

밍래그로프 2020. 11. 26. 17:15

JDBC(Java Database Connectivity)

-- sql을 자바로 쓴다고 생각하면 편하다. 

 

--DB에서 우리가 했던 프로세스를 살펴보자

0. DB를 어떤걸 쓸지 선택한다. ex)오라클, mysql,....

1.사용자가 DB에 접근을 한다.

2.쿼리문을 작성

3.쿼리문을 ;찍고 엔터눌러 실행

4.결과 반환

 

--자바에서 JDBC를 사용해 DB를 이용한다 해보자

0.DB를 선택한다.  

  자바에서: driver를 로드한다.

  class.forName("추가할 드라이버");

  

1.사용자가 DB에 접근을 한다.

  자바에서: Connection 객체가 이를 수행

  Connection con = DriverManager.getConnection ( "DB의 URL", 사용자ID, 사용자PWD );

 

2.쿼리문을 작성

  자바에서: Statement 객체가 이를 수행

  Statement stmt = con.createStatement();  //사용자접근.쿼리수행기능 

 

3.쿼리문 실행

자바에서: stmt.exeute("실행 쿼리");

stmt.execute(“query”); //any SQL

stmt.executeQuery(“query”); //SELECT

stmt.executeUpdate(“query”);

//INSERT, UPDATE, DELETE

 

4.결과 반환

자바에서: 실행결과 = 쿼리수행문.쿼리수행

ResultSet rs = stmt.executeQuery( "select no from user" );

while ( rs.next() ){

//결과로서 리턴된 rs에서 next()를 하면 다음 행의 결과 리턴. 

//rs.next() 를 한번 해야 결과의 첫번째 행이 리턴된다.

}

 

5.마무리

rs.close();

stmt.close();

con.close();

주의! close()를 꼭 해줘야 한다.

결과자체는 DB에 남아있다. 자바는 그 결과를 확인 가능하게 레퍼런스 변수를 가지고 있는다.

DB에 결과가 너무 많을때 그것을 다 가져올 수는 없기 때문이다.

 

코드 예제

0. 오라클기준 DB 연결하기

1
2
3
4
5
6
7
8
9
public static Connection getConnection() throws Exception{
    String url = "jdbc:oracle:thin:@117.16.46.111:1521:xe";
    String user = "smu";
    String password = "smu";
    Connection conn = null;
    Class.forName("oracle.jdbc.driver.OracleDriver");
    conn = DriverManager.getConnection(url, user, password);
    return conn;
}
cs

 

1.GuestBook  이라는 테이블에서 모든 행을 뽑아올 때

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public List<GuestBookVO> getGuestBookList(){
        List<GuestBookVO> list = new ArrayList<>();
        GuestBookVO vo = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try{
            conn = DBUtil.getConnection();
            String sql = "select * from guestbook";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){
                vo = new GuestBookVO();
                vo.setNo(rs.getInt(1));
                vo.setId(rs.getString(2));
                vo.setTitle(rs.getString(3));
                vo.setConetnt(rs.getString(4));
                vo.setRegDate(rs.getString(5));
                list.add(vo);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.close(conn, ps, rs);
        }        
        return list;        
    }
cs

 

2.GuestBook에 새로운 행 추가하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public int addGuestBook(GuestBookVO vo){
        int result = 0;
        Connection conn = null;
        PreparedStatement ps = null;
        try{
            conn = DBUtil.getConnection();
            String sql = "insert into guestbook values("
                    + "guestbook_seq.nextval,?,?,?,sysdate)";
            ps = conn.prepareStatement(sql);
            ps.setString(1, vo.getId());
            ps.setString(2, vo.getTitle());
            ps.setString(3, vo.getConetnt());
            result = ps.executeUpdate();
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.close(conn, ps);
        }
        
        return result;
    }
cs

?의 값을 바인딩하기 위해 set 메서드를 이용해야한다.

 

 

3.close()로 닫아주기

1
2
3
4
5
6
7
8
9
public static Connection getConnection() throws Exception{
    String url = "jdbc:oracle:thin:@117.16.46.111:1521:xe";
    String user = "smu";
    String password = "smu";
    Connection conn = null;
    Class.forName("oracle.jdbc.driver.OracleDriver");
    conn = DriverManager.getConnection(url, user, password);
    return conn;
}
cs