[JDBC] Statement 클래스

Statement 클래스



Statement 클래스

- SQL 구문을 실행하는 역할

- 스스로는 SQL 구문 이해 못함(구문해석 X) -> 전달역할

- SQL 관리 O + 연결 정보 X

 

Statement 종류


1. Statement

- 기본 객체

- 텍스트 SQL 호출

 

2. PreparedStatement

- Statement 객체의 기능 향상

- 인자와 관련된 작업이 특화(매개변수)

- 코드 안정성 높음. 가독성 높음.

- 코드량이 증가

- 텍스트 SQL 호출

 

3. CallableStatement

- 2번이 베이스

- 프로시저 호출 전용


Statement 객체 이용 기본예제


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
28
29
30
31
32
33
34
35
36
37
public class Example{
    public static void main(String[] args) {
        //1. 접속
        Connection conn = null;
        
        try {
            
            conn = DBUtil.getConnection(); //DBUtil : Connection 객체를 반환하는 getConnection 메소드 호출
            System.out.println(conn.isClosed() ? "접속안됨":"접속됨");
            
            //2. SQL 실행
            Statement stat=conn.createStatement();
            
            //SQL -> 문자열 -> Statement 전달 -> 오라클
            String sql = "insert into tblAddress(seq,name,age,tel,address,regdate) values"
                    + "(addressSeq.nextval,'홍길동',20,'010-3234-5150','서울시 강남구 역삼동',default)";
            //a. 반환값이 없는 쿼리용
            //-select 제외한 전용
            //-반환값 : 해당 쿼리를 실행했을 때 적용된 행의 갯수
            int result = stat.executeUpdate(sql); //Ctrl + Enter
            System.out.println(result);
            
            //b. 반환값이 있는 쿼리용
            //-select 전용.
//            stat.executeQuery(sql);
            
            //3. 접속종료(자원해제)
            stat.close();
            conn.close();
            
            
        } catch (Exception e) {
            System.out.println("JDBCTest.main()" + e.toString());
        }
        
    }//main
}//클래스

cs

stat.close()와 conn.close() 는 반드시 해주어야한다.!! -> 보통 Connection은 프로그램이 살아있는동안 계속 살아있지만, Statement 객체는 쿼리1개를 날리고 close를 해주어야 한다. -> 위의 예제는 프로그램 1번이 main 메소드 1번이기 때문에 connection을 close 해주는 것이다.



상황별 Statement 예제


select의 결과셋

 - 전진커서(한번읽으면 못돌아간다) 

 - 커서사용하는 환경의 공통점 > 자기가 읽게될 집합의 요소 갯수를 미리 알 수 없다.

1. 단일레코드

-if(rs.next){} > rs.getXXXX("컬럼명")

2. 다중레코드

-while(rs.next()){} > rx.getXXXX("컬럼명")


1. 단일값 반환(단일레코드, 단일컬럼)


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
28
29
30
31
public class Ex03_Statement {
    private static void m1() {
        //단일값 반환        //1. 대다수 : 오라클 -> (문자열 , 숫자) -> 자바
        //2. 날짜/시간형 : 오라클 -> 자바
        // a. 문자열 : 권장.
        // b. java.sql.Date (잘 사용안함)
        
        Connection conn = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            conn=DBUtil.getConnection();
            stat=conn.createStatement();
            
            String sql = "select max(adddate) as adddate from tblTodo";
            
            rs=stat.executeQuery(sql);
            
            if(rs.next()) {
                Date adddate=rs.getDate("adddate");
                System.out.printf("%tF %tT\n",adddate,adddate);
                
            }else
                System.out.println("데이터없음");
            rs.close();
            stat.close();
            conn.close();
        } catch (Exception e) {
            System.out.println("JDBCTest.m2()" + e.toString());
        }
    }}//클래스
cs



2. 단일값 반환(단일행 + 다중컬럼)


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
28
29
30
31
32
33
public class Ex03_Statement {
    private static void m1() {
        //단일행 + 다중컬럼        
//1010번 직원 정보
        String num = "1000";
        Connection conn = null;
        Statement stat = null;
        ResultSet rs = null;
        
        try {
            conn = DBUtil.getConnection();
            stat = conn.createStatement();
            String sql = "select * from tblInsa where num="+num;
            
            rs=stat.executeQuery(sql);
            if(rs.next()) {
                //반환하는 컬럼의 값들을 String변수로 받는다.
                String name =rs.getString("name");
                String ssn = rs.getString("ssn");
                String buseo = rs.getString("buseo");
                String jikwi = rs.getString("jikwi");
                
                System.out.println(name+","+ssn+","+buseo+","+jikwi);
                rs.close();
                stat.close();
                conn.close();
            }
            else
                System.out.println("사원번호 "+num+"은 존재하지 않습니다.");
        } catch (Exception e) {
            System.out.println("JDBCTest.m3()" + e.toString());
        }    
    }
}//클래스
cs



3. 다중값 반환(다중레코드 + 다중컬럼)


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
28
29
30
public class Ex03_Statement {
    private static void m1() {
        Connection conn = null;        Statement stat = null;
        ResultSet rs = null;
        
        try {
            conn = DBUtil.getConnection();
            stat = conn.createStatement();
            String sql = "select m.name as mname, w.name as wname from tblMen m "
                    + "inner join tblWomen w on m.name=w.couple ";
            
            rs=stat.executeQuery(sql);
            while(rs.next()) {
                
                String mname =rs.getString("mname");
                String wname =rs.getString("wname");
                System.out.println(mname+","+wname);
            }
            rs.close();
            stat.close();
            conn.close();
        } catch (Exception e) {
            System.out.println("JDBCTest.m5()" + e.toString());
        }    
    }
}//클래스by Color Scripter
cs


댓글

Designed by JB FACTORY