::: 강좌/소스/문서 :::

강좌/소스/문서 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  신훈재(2004-06-18 13:55:27, Hit : 7763, Vote : 1468
 [자바] Query Statement

[ Query Statement ]


0. Statement는 수행할 때마다 새로운 Statement 가 생기므로
   다 사용하고 난 후 반드시 close()가 되어야 한다.
   -------------------------------------------
   PreparedStatement pstmt = null;
   while(true) {
     pstmt = conn.prepareStatement("Delete From Community Where commNumber = ?");
     pstmt.setInt(1, commNumber);
     pstmt.executeQuery();
     pstmt.close();
   }
   -------------------------------------------
  
0. 하나의 Connection에서 동시에 생성될 수 있는 Statement의 수.

   Oracle의 경우 Oracle SID 구성파일에서 아래의 파라메터를 추가로 넣어줌으로써
   변경할 수 있습니다.
   -------------------------------------------
   # OPEN_CURSORS=50  # Default
   OPEN_CURSORS=100
   -------------------------------------------

0. Oracle 의 경우, 현재 열려진 총 Statement의 개수를 보는 방법이 있습니다.(DB2는 없다.)
    -------------------------------------------
    select sid, count(*) cnt from v$open_cursor
    where user_name = 'username'
    group by sid
    order by cnt desc
    -------------------------------------------



1. Statement
  
   데이터베이스가 인식할 수 있는 포맷으로 번역하는 역할을 담당한다.
   세가지 기본타입:  Statement/PreparedStatement/CallabelStatement

   ResultSet executeQuery(String sql) :주어진 SQL 문장을 수행하고 질의 결과로 ResultSet 을 반환한다.
   int executeUpdate(String sql) : 문자열로 명시된 SQL INSERT , UPDATE 또는 DELETE 문장을 실행한다.
        또한 DDL(DataDefinition Language) 문장을 실행하기위해서도 사용된다 . 영향받은 레코드들의 수를반환한다.
   void cancel() : 다른 쓰레드에 의해서 실행되고 있는 JDBC 문장을 취소한다 .

   ----------------------------------------------------------------------
   Class.forName("oracle.jdbc.driver.OracleDriver");
   Connection con = DriverManager.getConnection("jdbc:oracle:thin:@IP:PORT:SID","id","passwd");
   Statement stmt = con.reateStatement();
   stmt.executeUpdate("insert into testTablename values (3, 'choi young')");
   stmt.executeUpdate("Drop table testTablename");
   ResultSet results = stmt.executeQuery( "SELECT name FROM testTablename");
   ----------------------------------------------------------------------
   주의 )
   Insert, Delete, Update는 실패했는지 성공했는지를 알리는 boolean값을 반환하지만
   DDL명령어는 어떠한 값도 리턴하지 않는다.
   stmt로 실행할 수 있는 SQL명령어는 INSERT, DELETE, UPDATE, CREATE TABLE, DROP TABLE등의
   데이터 정의 명령을 수행 할 수 있다. 하지만 SELECT명령을 수행하기 위해서는 execteQuery메서드를 이용해야 한다.


2. PreparedStatement
  
   사전에 컴파일되기 때문에 그것의 실행은 Statement 객체보다 더 빠르다.
   일반적인 Statement를 이용하면 하나의 Statement만을 이용해야 하지만
   PreparedStatement를 이용하면 보다 다양한 Query를 이용할 수 있다.

   ResultSet executeQuery() : 준비된 SQL 질의를 실행하고 ResultSet 객체를 반환한다 .
   int executeUpdate() : INSERT, UPDATE, DELETE구문을 실행. 변경된 행들의 수를 반환하거나 DLL 구문을 위해 0을 반환한다 .
   void setXXX(int n, XXX x) : ( XXX 는 int, double, String, Data 같은 자료형을 의미한다 .)
        x 를 n 번째 전달인자 값으로 설정한다 .
   void clearParameters() : 준비된 구문에서 현재의 모든 전달인자를 해제한다 .

   ----------------------------------------------------------------------
   PreparedStatement prestmt = con.prepareStatement ( "SELECT * FROM samba WHERE jacount1 = ? and jacount2=?" );

   //prestmt.setString(1, "애플릿"); -->만약 String형이면 setString()함수를 이용하여 셋팅해야 한다.
   prestmt.setInt ( 1, 10000 );//첫번째 ? 셋팅
   prestmt.setInt ( 2, 10000 );//두번째 ? 셋팅

   ResultSet rs = prestmt.executeQuery ( );

   while ( rs.next ( ) )
          System.out.println ( new String ( rs.getBytes ( "jasubject" ) ) );
   ----------------------------------------------------------------------
   Query중간에 '?' 문자는 변수를 의미하며
   첫번째 변수를 셋팅하고 두번째 변수를 셋팅하는 방법이다.
   주의해야 하는 것은 ?를 셋팅 할 때 int형이면 setInt()함수를 String형이면 setString()함수를 이용해야 한다.


3. CallableStatement
  
   접속을 수행하였다면, callable statement를 생성하기 위한 Connection.prepareCall 메소드를 호출할 수 있다.
   callable statement는 SQL 저장된 프로시져(SQL stored procedure)를 수행할 수 있게 한다.
   3개의 파라미터를 가진 CallableStatement 객체를 생성하여 Query를 실행하면 cs는 결과값을 갖게 된다.

   ----------------------------------------------------------------------
   CallableStatement cs = con.prepareCall("{call myStoredProcedure(?,?,?)}");
   cs.setString(1,userid);
   cs.setString(2,userpwd);
   cs.registerOutParameter(3,username);
   cs.executeQuery();
   String lastLogin = cs.getString(3);
   ----------------------------------------------------------------------
  

4. 예제

  PreparedStatement
  -----------------------------------------------------------------------------
  import java.sql.*;
  import java.lang.*;

  public class SimplePreparedApp
  {
     public static void main(String[] args)
     {
         try {
            //Class.forName("oracle.jdbc.driver.OracleDriver");//오라클 드라이브 로딩
            //Connection con = DriverManager.getConnection("jdbc:oracle:thin:@IP:PORT:SID","id","passwd");//오라클 DB연결설정

            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//ODBC Driver Loading
            Connection con = DriverManager.getConnection("jdbc:odbc:jadsn","jadbo","merongmerong"); //ODBC DB연결설정
            PreparedStatement prestmt = con.prepareStatement("SELECT * FROM samba WHERE jacount1 = ? and jacount2=?");
            ResultSet rs =null;

            //prestmt.setString(1, "애플릿"); -->만약 String형이면 setString함수를 이용하여 셋팅해야 한다.
            prestmt.setInt(1, 10000);//첫번째 ? 셋팅
            prestmt.setInt(2, 10000);//두번째 ? 셋팅

            rs = prestmt.executeQuery();//쿼리 데이터베이스로 전송하여 ResultSet받기

            while( rs.next()) //Record를 순회하면서 결과 출력하기
                   System.out.println(new String(rs.getBytes( "jasubject")));

            rs.close();

            prestmt.setInt(1, 20000);
            prestmt.setInt(2, 20000);

            rs = prestmt.executeQuery();

            while( rs.next()) //Record를 순회하면서 결과 출력하기
                   System.out.println(rs.getString( "jasubject"));

            rs.close();
            con.close();
        } catch (Exception e) { System.err.println("SQL Error : " + e.getMessage()); }
     }  
  }
  -----------------------------------------------------------------------------





23   [Java/PHP] [자바] DB 컨넥션 풀  신훈재 2004/06/18 9512 1857
22   [Java/PHP] [자바] JDBC-ODBC 연결 예제  신훈재 2004/06/18 9047 1672
21   [Java/PHP] [자바] 시스템 프로퍼티를 이용한 드라이버 로드  신훈재 2004/06/18 5487 1425
20   [Java/PHP] [자바] 오라클 각종 에러  신훈재 2004/06/18 6490 1671
19   [Java/PHP] [자바] 활용팁(오라클)  신훈재 2004/06/18 5997 1603
18   [Java/PHP] [자바] ResultSet 질의결과  신훈재 2004/06/18 6112 1317
17   [Java/PHP] [자바] Select예제  신훈재 2004/06/18 6250 1562
16   [Java/PHP] [자바] Update예제  신훈재 2004/06/18 5414 1333
15   [Java/PHP] [자바] Insert 예제  신훈재 2004/06/18 6493 1673
  [Java/PHP] [자바] Query Statement  신훈재 2004/06/18 7763 1468
13   [Java/PHP] [자바] JDBC Connect  신훈재 2004/06/18 6718 1489
12   [Java/PHP] [자바] JDBC 코딩시 주위사항(jsp, servlet)  신훈재 2004/06/18 6138 1357
11   [Java/PHP] [자바] 여러종류의 데이타베이스 테스트 소스  신훈재 2004/06/18 6421 1457
10   [Java/PHP] [자바] JDBC 테스트 소스(오라클)  신훈재 2004/06/18 5437 1345
9   [Java/PHP] [소스] snmp 를 이용한 시스템 가용율 구하기 예제  김영대 2003/12/01 9570 2092
8   [Java/PHP] [소스] Oolong 언어를 이용한 Factorial 계산 프로그램 예제  김영대 2003/11/10 6634 1683
7   [Java/PHP] [문서] Java Web Services Development Pack (JWSDP) 1.0 tutorial  김영대 2003/03/24 5851 1457
6   [Java/PHP] [문서] Java Swing v1.1.1 도움말  김영대 2003/03/24 5782 1470
5   [Java/PHP] [문서] Java Servlet Development Kit (JSDK) v2.3 도움말  김영대 2003/03/24 5520 1454
4   [Java/PHP] [문서] Java 2 SDK, Enterprise Edition (J2EE) 1.3.1 도움말  김영대 2003/03/24 5617 1469

1 [2]
 

Copyright 1999-2017 Zeroboard / skin by zero