1. preparedStatement

 

- statement를 상속받는 인터페이스로 SQL구문을 실행시키는 기능을 갖는 객체

 

- 사용방법
 SQL문장에 변수가 들어가야 할 부분을 ?로 넣고, 실행시 ?에 대응 되는 값을 setXXX메소드를 통해 설정한다.

 

- 특징
1) statement객체는 실행시 sql명령어를 지정하여 여러 sql구문을 하나의 statement객체로 수행이 가능하다.(재사용 가능)
 하지만, preparedStatement는 객체 생성시에 지정된 sql명령어만을 실행할수 있다.

 (다른 sql구문은 실행못함 ->재사용 못함)


2) 동일한 sql구문을 반복 실행한다면 preparedStatement가 성능면에서 빠름.

 

3) preparedStatement가 Statement보다 보안성이 좋다.

 

 

 

 

 

2. 테스트

 

1) 테이블
members

 

 drop table MEMBERS cascade constraints;


 CREATE TABLE MEMBERS(

    ID VARCHAR2(10) PRIMARY KEY,

    PWD VARCHAR2(10),

    EMAIL VARCHAR2(15),

    PHONE VARCHAR2(20),

    REGDATE DATE);

 

 

 

2) 자바소스

 

EX> 접속 후 preparedStatement로 입력,수정,삭제 등 간단히 테스트 하기.

Test01.java

package test01.jdbc;


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

 


class MyJdbc01{
    public MyJdbc01(){


        Connection con=null;
        PreparedStatement pstmt=null;
        PreparedStatement pstmt1=null;
        PreparedStatement pstmt2=null;
        int n = 0;


        try{
            //1.드라이버로딩
            Class.forName("oracle.jdbc.OracleDriver");


            //2.컨넥션객체 얻어오기
            String url="jdbc:oracle:thin:@localhost:1521:XE";
            con=DriverManager.getConnection(url,"scott","tiger");
            System.out.println("db접속완료");

 

            String sql="insert into members values(?,?,?,?,sysdate)";

 

            //sql구문을 실행시키기 위한 prearestatement 객체 얻어오기
            pstmt=con.prepareStatement(sql);

 

            //?에 대응되는 값을 setXXX메소드로 지정하기
            pstmt.setString(1, "popo2");//1번째 ?에 yyy넣기
            pstmt.setString(2, "0707");//2번째 ? 에 0707넣기
            pstmt.setString(3, "yyy@naver");//3번째 ? 에 yyy@naver넣기
            pstmt.setString(4, "010-111-1111");//4번째 ? 에 010-111-1111넣기

 

            //sql 구문 실행
            n=pstmt.executeUpdate();
            System.out.println(n+"개의 데이터 추가");
           
            String sql1 = "DELETE FROM MEMBERS WHERE ID=?";


            pstmt1 = con.prepareStatement(sql1);
            pstmt1.setString(1, "yyy");
            n = pstmt1.executeUpdate();
            System.out.println(n+"개의 데이터 삭제");
           
            String sql2 = "UPDATE MEMBERS SET PWD=?,EMAIL=?,PHONE=? WHERE ID=?";
            pstmt2 = con.prepareStatement(sql2);
            pstmt2.setString(1, "1");
            pstmt2.setString(2, "2");
            pstmt2.setString(3, "3");
            pstmt2.setString(4, "popo2");
            n = pstmt2.executeUpdate();
            System.out.println(n+"개의 데이터 수정");
           
        }catch(ClassNotFoundException ce){
            System.out.println(ce.getMessage());
        }catch(SQLException se){
            System.out.println(se.getMessage());
        }finally{
            try{
                if(pstmt!=null) pstmt.close();
                if(pstmt1!=null) pstmt1.close();
                if(con!=null) con.close();
            }catch(SQLException se){
                System.out.println(se.getMessage());
            }
        }
    }
}

public class Test01 {
    public static void main(String[] args) {
        new MyJdbc01();
    }
}

 

 

EX> 전체조회하기, 아이디를 입력받아 입력,삭제,조회하기.

 Test02.java

package test01.jdbc;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Scanner;


class MyJdbc02{
    Connection con;
    Scanner scan = new Scanner(System.in);
   
    public MyJdbc02(){
        try{
            Class.forName("oracle.jdbc.OracleDriver");
            String url = "jdbc:oracle:thin:@localhost:1521:xe";
           
            con = DriverManager.getConnection(url,"scott","tiger");
            System.out.println("db접속");
           
        }catch(ClassNotFoundException ce){
            System.out.println(ce.getMessage());
        }catch(SQLException e){
            System.out.println(e.getMessage());
        }
    }


    public void disconnect() throws SQLException{
        if(con!=null) con.close();
    }
   
    public void showList() throws SQLException{
        PreparedStatement pstmt = null;
        ResultSet rs = null;
       
        String sql = "SELECT * FROM MEMBERS";
        pstmt = con.prepareStatement(sql);
        rs = pstmt.executeQuery();


        while(rs.next()){
            String id = rs.getString("id");
            String pwd = rs.getString("pwd");
            String email = rs.getString("email");
            String phone = rs.getString("phone");
           
            Timestamp regdate = rs.getTimestamp("regdate");
           
            System.out.println(id + "\t" + pwd + "\t" + email + "\t" + phone + "\t" + regdate );
        }
        if(rs!=null) rs.close();
        if(pstmt !=null) pstmt.close();
    }
   
    // 아이디를 입력받아 해당 정보를 삭제하기.
    public void delete() throws SQLException{
        PreparedStatement pstmt = null;
        System.out.println("아이디를 입력받아 해당 정보를 삭제하는 메소드");
        System.out.println("아이디>");
        String id = scan.next();
       
        String sql = "DELETE FROM MEMBERS WHERE ID=?";


        pstmt = con.prepareStatement(sql);
        pstmt.setString(1, id);
        int n = pstmt.executeUpdate();
    }

   

    // 아이디, 비밀번호, 이메일, 전화번호를 입력받아 추가하는 메소드 만들기
    public void insert() throws SQLException{
        PreparedStatement pstmt = null;
        System.out.println("아이디, 비밀번호, 이메일, 전화번호를 입력받아 추가하는 메소드");
        System.out.println("아이디>");
        String id = scan.next();
        System.out.println("비밀번호>");
        String pwd = scan.next();
        System.out.println("이메일>");
        String email = scan.next();
        System.out.println("전화번호>");
        String phone = scan.next();
       
        String sql="INSERT INTO MEMBERS VALUES (?,?,?,?,SYSDATE)";
        pstmt = con.prepareStatement(sql);
        pstmt.setString(1, id);
        pstmt.setString(2, pwd);
        pstmt.setString(3, email);
        pstmt.setString(4, phone);
       
        int n = pstmt.executeUpdate();
    }

 


    // 아이디를 입력받아 해당정보를 출력하는 메소드 만들기
    public void getInfo() throws SQLException{
        PreparedStatement pstmt = null;
        ResultSet rs = null;
       
        String sql ="SELECT * FROM MEMBERS WHERE ID=?";
        System.out.println("아이디를 입력받아 해당정보를 출력하는 메소드");
        System.out.println("아이디>");
        String id = scan.next();
        pstmt = con.prepareStatement(sql);
        pstmt.setString(1, id);
        rs = pstmt.executeQuery();
        rs.next();
        System.out.println( "ID:"    + rs.getString("id")    + "\t" +
                            "PWD:"   + rs.getString("pwd")   + "\t" +
                            "EMAIL:" + rs.getString("email") + "\t" +
                            "PHONE:" + rs.getString("phone")  );
    }
}
public class Test02 {
    public static void main(String[] args) {
        MyJdbc02 mj = new MyJdbc02();
        try{
            mj.showList();
            mj.insert();
            mj.delete();
            mj.getInfo();
        }catch(SQLException e){
            System.out.println(e.getMessage());
        }finally{
            try {
                mj.disconnect();
            } catch (Exception e2) {
            }
        }
    }
}

 

+ Recent posts