네트워킹

오늘:
1,033
어제:
2,474
전체:
2,778,933

고객센타 : 070-7752-2000
팩스 : 070-7752-2001
휴대폰 : 010-9513-0019
email : voipkorea@yahoo.co.kr

국민은행
(주)제이에스솔루션
047101-04-155519

Flag Counter
■ 무료 : 유선 집전화 휴대폰 ( 한국 미국 중국 카나다) ↔ (국내 해외 여행자 상사 주재원 유학생) / 가입무 무제한무료■

http://snix.tistory.com/134

 

 

[09-D16][JDBC] PreparedStatement

[01] PreparedStatement 클래스의 사용

    - 자바에서 보낸 쿼리가 데이터베이스의 캐시 영역에 컴파일되어 저장되어 있음으로
      같은 쿼리를 실행시 빠른 처리속도를 지원합니다.

    - 10000개의 레코드 추가시 Statement 클래스 보다 처리속도 약 13초 빠름.

    - 간결하고 구조적인 쿼리문 작성 가능.

    - 반복해서 같은 쿼리를 보낼 경우 효과가 큼.

    - SQL Injection등의 공격을 피할 수 있는 구조를 가지고 있음.

    - 현재 Oracle만 이 기능을 지원합니다. 따라서 다른 데이터베이스는 내부적으로
       Statement로 변경되어 실행됩니다. (MySQL은 5.0버전부터 지원)

    - INSERT, UPDATE, DELETE SQL 실행
      int cnt = pstmt.executeUpdate();

    - SELECT SQL 실행
      ResultSet rs = pstmt.executeQuery();

    - 콘솔상에서의 실행, JDBC Driver 복사
      H:
      cd H:\dos4\workspace_java\day17\bin
      java -classpath %CLASSPATH%;mysql-connector-java-5.1.12-bin.jar prep.SelectPrepDB

    - 테이블 구조
      . PRIMARY KEY: 컬럼의 값은 중복된 값이 올 수 없습니다.
      . AUTO_INCREMENT: 레코드 추가시 일련번호를 순차적으로 자동으로
                        생성해 줍니다.

DROP TABLE predb;

CREATE TABLE predb(
    no       INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    language VARCHAR(20) NOT NULL,
    db       VARCHAR(20) NOT NULL,
    os       VARCHAR(30) NOT NULL
);

-- no컬럼은 AUTO_INCREMENT 속성이 선언되어 있음으로 레코드 추가시
-- 컬럼을 명시하지 않아도 자동으로 일련번호가 등록됩니다.
INSERT INTO predb(language, db, os)
VALUES('JSP', 'MySQL, Oracle', '모든 운영체제');

INSERT INTO predb(language, db, os)
VALUES('ASP', 'Access, MS-SQL', 'Windows Server');

INSERT INTO predb(language, db, os)
VALUES('ASP.NET', 'MS-SQL', 'Windows Server');

INSERT INTO predb(language, db, os)
VALUES('PHP', 'MySQL', '모든 운영체제');


SELECT no, language, db, os FROM predb;
+----+----------+----------------+----------------+
| no | language | db             | os             |
+----+----------+----------------+----------------+
|  1 | JSP      | MySQL, Oracle  | 모든 운영체제  |
|  2 | ASP      | Access, MS-SQL | Windows Server |
|  3 | ASP.NET  | MS-SQL         | Windows Server |
|  4 | PHP      | MySQL          | 모든 운영체제  |
+----+----------+----------------+----------------+

 

Eclipse setting
    Project type: Java Project
    Project name: mysql_prep

 


1. INSERT의 이용
   - statementd의 PreparedStatement로의 변경

>>>>> InsertPrepDB.java

package prep;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
//import java.sql.ResultSet;
import java.sql.SQLException;

public class InsertPrepDB {
    public static void main(String args[]) {
        Connection con=null;
        PreparedStatement  pstmt=null;
        //ResultSet rs=null;

        String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr";
        String jdbc = "org.gjt.mm.mysql.Driver";
        String user = "javauser";
        String pass = "1234";
       
        try {
            Class.forName(jdbc);

            //커넥션 연결
            con = DriverManager.getConnection(url, user, pass);

            String sql = " INSERT INTO predb(language, db, os) ";
            sql  = sql + " VALUES(?, ?, ?)";

            //쿼리 지정
            pstmt = con.prepareStatement(sql);

            //(물음표의 순번, 적용할 값)
            pstmt.setString(1, "MVC");
            pstmt.setString(2, "oracle");
            pstmt.setString(3, "모든 운영체제");

            // 레코드 추가후 1을 ret에 저장
            int cnt = pstmt.executeUpdate();

            System.out.println("레코드 " + cnt + "개가 추가 되었습니다.");
           
        } catch(Exception e) {
            System.out.println("SQLException: " + e.getMessage());
        } finally{
            try{
                if ( pstmt != null){ pstmt.close(); }
            }catch(Exception e){}
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}
        }
    }

}

 

 

2. SELECT의 이용

>>>>> SelectPrepDB.java

package prep;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class SelectPrepDB {
    public static void main(String args[]) {
        Connection con=null;
        PreparedStatement  pstmt=null;
        ResultSet rs=null;

        String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr";
        String jdbc = "org.gjt.mm.mysql.Driver";
        String user = "javauser";
        String pass = "1234";
       
        try {
            Class.forName(jdbc);

            //커넥션 연결
            con = DriverManager.getConnection(url,user, pass);

            String sql = " SELECT no, language, db, os ";
            sql =  sql + " FROM predb ORDER BY no DESC";
            // sql =  sql + " FROM predb WHERE no = ?";

            //쿼리 지정
            pstmt = con.prepareStatement(sql);

            //(물음표의 순번, 적용할 값)
            //문자열 지정 pstmt.setString(....)
            //첫번째 ?표에 값 1을 지정
            //pstmt.setInt(1, 1);

            rs = pstmt.executeQuery();

            // 하나의 레코드 출력
            // if (rs.next() == true){
               
            // 여러개의 레코드 출력   
            while(rs.next()){
                System.out.println("번호: " + rs.getInt("no"));
                System.out.println("언어: " + rs.getString("language"));
                System.out.println("DB  : " + rs.getString("db"));
                System.out.println("OS  : " + rs.getString("os"));
                System.out.println("-------------------------------------");
            }
 
        } catch(Exception e) {
            System.out.println("SQLException: " + e.getMessage());
        } finally{
            try{
                if ( rs != null){ rs.close(); }
            }catch(Exception e){}
            try{
                if ( pstmt != null){ pstmt.close(); }
            }catch(Exception e){}
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}
        }
    }
}

 

 

3. UPDATE의 이용

>>>>> UpdatePrepDB.java

package prep;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class UpdatePrepDB {
    public static void main(String args[]) {
        Connection con=null;
        PreparedStatement  pstmt=null;
        //ResultSet rs=null;

        String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr";
        String jdbc = "org.gjt.mm.mysql.Driver";
        String user = "javauser";
        String pass = "1234";
       
        try {
            Class.forName(jdbc);
            con = DriverManager.getConnection(url, user, pass);

            String sql = " UPDATE predb SET language=?, db=?, os=? ";
            sql  = sql + " WHERE no=?";

            //쿼리 지정
            pstmt = con.prepareStatement(sql);

            //(물음표의 순번, 적용할 값)
            pstmt.setString(1, "java");
            pstmt.setString(2, "oracle");
            pstmt.setString(3, "모든 운영체제");
            pstmt.setInt(4, 1);

            // 레코드 추가후 1을 ret에 저장
            int cnt = pstmt.executeUpdate();

            System.out.println("레코드 " + cnt + "개가 수정 되었습니다.");
           
        } catch(Exception e) {
            System.out.println("SQLException: " + e.getMessage());
        } finally{
            try{
                if ( pstmt != null){ pstmt.close(); }
            }catch(Exception e){}
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}
        }
    }

}

 

 

4. Delete

>>>>> DeletePrepDB.java

package prep;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
//import java.sql.ResultSet;
import java.sql.SQLException;

public class DeletePrepDB {
    public static void main(String args[]) {
        Connection con = null;
        PreparedStatement pstmt = null;
        //ResultSet rs=null;

        String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr";
        String jdbc = "org.gjt.mm.mysql.Driver";
        String user = "javauser";
        String pass = "1234";
       
        try {
            Class.forName(jdbc);

            //커넥션 연결
            con = DriverManager.getConnection(url, user, pass);

            String sql = " DELETE FROM predb";
            sql  = sql + " WHERE no = ?";

            //쿼리 지정
            pstmt = con.prepareStatement(sql);

            //(물음표의 순번, 적용할 값)
            pstmt.setInt(1, 4);

            int cnt = pstmt.executeUpdate();

            System.out.println("레코드 " + cnt + "개가 삭제 되었습니다.");
           
        } catch(Exception e) {
            System.out.println("SQLException: " + e.getMessage());
        } finally{
            try{
                if ( pstmt != null){ pstmt.close(); }
            }catch(Exception e){}
            try{
                if ( con != null){ con.close(); }
            }catch(Exception e){}
        }
    }

}

 

 

5. JDBC 접속 및 해제 Utility Class의 제작

>>>>> DBConnect.java

package prep;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class DBConnect {
    public static Connection getConnection() {
        Connection con = null;

        String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr";
        String jdbc = "org.gjt.mm.mysql.Driver";
        String user = "javauser";
        String pass = "1234";
       
        try {
            Class.forName(jdbc);

            //커넥션 연결
            con = DriverManager.getConnection(url, user, pass);
        } catch(Exception e) {
            System.out.println("SQLException: " + e.getMessage());
        } finally{
        }
       
        return con;
    }
   
    public static void close(Connection con, PreparedStatement pstmt){
        try{
            if ( pstmt != null){ pstmt.close(); }
        }catch(Exception e){}
       
        try{
            if ( con != null){ con.close(); }
        }catch(Exception e){}       
    }
   
    public static void close(Connection con, PreparedStatement pstmt, ResultSet rs){
        try{
            if ( rs != null){ rs.close(); }
        }catch(Exception e){}
       
        try{
            if ( pstmt != null){ pstmt.close(); }
        }catch(Exception e){}
       
        try{
            if ( con != null){ con.close(); }
        }catch(Exception e){}       
    }
}

 

 

>>>>> InsertPrepDB2.java

package prep;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
//import java.sql.ResultSet;
import java.sql.SQLException;

public class InsertPrepDB2 {
    public static void main(String args[]) {
        Connection con=null;
        PreparedStatement  pstmt=null;
        //ResultSet rs=null;

        try {
            //커넥션 연결
            con = DBConnect.getConnection();

            String sql = " INSERT INTO predb(language, db, os) ";
            sql  = sql + " VALUES(?, ?, ?)";

            //쿼리 지정
            pstmt = con.prepareStatement(sql);

            //(물음표의 순번, 적용할 값)
            pstmt.setString(1, "iBATIS");
            pstmt.setString(2, "oracle");
            pstmt.setString(3, "모든 운영체제");

            // 레코드 추가후 1을 ret에 저장
            int cnt = pstmt.executeUpdate();

            System.out.println("레코드 " + cnt + "개가 추가 되었습니다.");
           
        } catch(Exception e) {
            System.out.println("SQLException: " + e.getMessage());
        } finally{
            DBConnect.close(con, pstmt);
        }
    }

}


 

조회 수 :
16329
등록일 :
2013.10.26
15:53:58 (*.251.139.171)
엮인글 :
http://webs.co.kr/index.php?document_srl=32815&act=trackback&key=2a5
게시글 주소 :
http://webs.co.kr/index.php?document_srl=32815
List of Articles
번호 제목 글쓴이 날짜 조회 수
55 Sqlite very detail easy tutorial I recommand this admin 2017-09-09 403
54 mysql 로컬접속 풀고 특정 아이피 접속 허가 허락 가능 하게 설정 하는 방법 admin 2017-09-05 402
53 linux command chmod 리눅스 명령어 가장 쉽게 이해하기 설명 사용자 구룹 타인 권한 admin 2017-09-05 412
52 mariadb CREATE USER CREATE USER statement creates new MariaDB accounts. admin 2017-09-01 407
51 MySQL 데이터 베이스 백업 및 복구 방법 admin 2017-09-01 424
50 Allowing MySQL Root Login from All IP Addresses : admin 2017-08-17 357
49 Installation of MySQL Database Server admin 2017-08-17 380
48 mysql 쿼리 로그 남기기 (실시간) admin 2015-04-15 3357
47 SQL Delete records using subqueries admin 2015-04-03 3352
46 Mysql privilege table GRANT SELECT,INSERT,UPDATE,DELETE ON db.table admin 2015-04-02 3528
45 안드로이드 SQLite 속도 향상! insert Transaction admin 2014-04-07 13743
44 MySQL에 원격 접속 허용 여러가지 아이피 아이피대역으로 admin 2014-04-02 10809
43 10gR2_sles10_install file admin 2014-03-18 8828
42 this is final answer assets sqlite Databases trouble copy External DB, check eclips admin 2014-02-18 9269
41 Browse SQLite data on the Android emulator admin 2014-02-15 10808
40 SQLite Database Browser file admin 2014-02-14 9656
39 SQLite Databases using External DB admin 2014-02-14 13791
38 sqlite DB copy admin 2014-02-14 9598
37 Android SQLite Database with Multiple Tables admin 2014-02-13 9106
36 Android Simple Clean Good SQLite Database Tutorial 잘된 설명 admin 2014-02-13 9811
35 android sqlite 사용하기 admin 2014-02-10 13846
34 SQLite 개발가이드 데이터베이스의 성능 admin 2014-02-10 15509
33 android - 다수의 Insert 수행시 속도 향상을 위한 팁 sQlite admin 2014-02-10 10346
32 Oracle Linux 에 Oracle DB 설치하기 admin 2013-12-03 13293
» PreparedStatement mysql java 깔끔한설명 admin 2013-10-26 16329
30 Connect Excel VBA to a MySQL database file admin 2013-09-05 12361
29 Configuring Oracle ASM disks in Oracle Enterprise Linux admin 2013-04-20 10724
28 OS에따른 Oracle 설치버전 admin 2013-04-08 11827
27 RHEL4 + 10g 설치 _silent mode admin 2013-04-08 11710
26 OLE5 + 11G 설치 _silent mode admin 2013-04-08 14873
25 WHERE 조건절 검색시 서브쿼리는 어떻게? admin 2013-04-01 11402
24 CDR 추출 저장 Inner Join 사용 Sql 문 admin 2013-02-05 11719
23 SUPER OCM 1.8club admin 2012-12-18 11108
22 MySQL Java tutorial admin 2012-09-30 16170
21 Oracle 10g Articles admin 2012-06-24 12868
20 기본 10g 설치의 리눅스 세팅에서 추가 해줘야하는 사항(윈도우) admin 2012-06-24 13958
19 SUSE Linux Enterprise Server 10 (Oracle 10g R2 (10.2.0.1)) file admin 2012-03-09 12874
18 Upgrade Oracle from 10.2.0.1 To 10.2.0.4 (Windows) admin 2012-03-06 17942
17 Upgrade Oracle 10g Release 2 from 10201 to 10204 admin 2012-03-05 25442
16 centos 6.2 oracle 10g 설치 admin 2012-03-05 28469
15 Oracle RHEL4+10G 10.2.0.1 설치 10.2.0.5 패치 admin 2012-03-03 17835
14 Oracle Backup & restore with RMAN 기본 admin 2012-02-12 13136
13 오라클 ACE가 해설하는 Oracle Backup & Recovery admin 2012-02-07 13010
12 Oracle Backup & Restore admin 2012-02-07 17415
11 http://www.hoons.kr/ admin 2011-12-19 13068
10 Java && Excel 연동 JAVA 자바로 엑셀을 핸들링 할 수 있는 방법 admin 2011-12-19 32814
9 (C#) ASP.NET MySQL Check Already Exists Add/Insert Record 프로그래밍 코드 admin 2011-12-19 13355
8 xhost and display admin 2011-12-16 12237
7 Oracle 설치 Centos ,openSUSE,엔터프라이즈등 퍼온글 admin 2011-12-16 14162
6 Oracle 의 ASM 구조 알아보기.. admin 2011-12-16 17632