[JDBC] Statement 클래스
- JDBC
- 2019. 3. 30. 18:22
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 }//클래스 |
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 |
'JDBC' 카테고리의 다른 글
[JDBC] PreparedStatement 개념 및 예제 (1) | 2019.04.21 |
---|---|
[JDBC] JDBC Conncetion 객체 반환 메소드 만들기(오라클 DB 연동) (0) | 2019.03.25 |
[JDBC] 오라클과 JDBC 연결하는 방법 (2) | 2019.03.24 |