java.sql.PreparedStatement 클래스 이다.

Statement 객체를 상속하고 SQL문을 미리 컴파일 해서 재사용하기 때문에 훨씬 빨리 데이터 베이스 작업을 수행한다.

Statement 와 PreparedStatement 차이점

Statement

PreparedStatement

			// 4.SQL 쿼리 생성
			// pstmt =conn.createStatement();
			// System.out.println("Statement 객체 생성 성공");

			// 6.데이터 입력
			// sql문에 ;(세미콜론)을 붙히지 않는다.
			// commit은 기본 설정시에는 필요없다.
//					String query2="insert into member values('java08','hong',1234,180,70)";
//					pstmt.executeUpdate(query2);
			//6-1 query를 미리 컴파일
			String query2="insert into member values(?,?,?,?,?)"; //삽입될 데이터는 없는 상태로 컴파일 된다.
			pstmt =conn.prepareStatement(query2);
			System.out.println(query2);
			
			//6-2 데이터 입력
			String id2 ="java09";
			String name2="james";
			String pwd2 ="1234";
			int height2 =180;
			int weight2 =60;
			
			pstmt.setString(1, id2);  //1부터 시작
			pstmt.setString(2, name2);
			pstmt.setString(3, pwd2);
			pstmt.setInt(4,height2);
			pstmt.setInt(5,weight2);
			pstmt.executeUpdate();
			
package com.java.db01;

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

public class DB03_PreparedStatement {

	public static void main(String[] args) {
		// DB >Table Listing> Statement ->PreparedStatement 변경

		// 1.연결 정보 입력(계정,위치 ,드라이버)
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "scott";
		String password = "tiger";

		Connection conn;
		// stmt <-(상속) PreparedStatement
		// Statement stmt;
		PreparedStatement pstmt;
		ResultSet rs;

		try {
			// 2.드라이버 로딩
			Class.forName(driver); // Class는 객체 생성 없이 클래스 정보를 가져올수 있다.
			System.out.println("JDBC드라이버 로딩 성공");
			// 3.접속
			conn = DriverManager.getConnection(url, user, password);
			System.out.println("오라클 연결 성공");

			// 4.SQL 쿼리 생성
			// pstmt =conn.createStatement();
			// System.out.println("Statement 객체 생성 성공");

			// 6.데이터 입력
			// sql문에 ;(세미콜론)을 붙히지 않는다.
			// commit은 기본 설정시에는 필요없다.
//					String query2="insert into member values('java08','hong',1234,180,70)";
//					pstmt.executeUpdate(query2);
			//6-1 query를 미리 컴파일
			String query2="insert into member values(?,?,?,?,?)"; //삽입될 데이터는 없는 상태로 컴파일 된다.
			pstmt =conn.prepareStatement(query2);
			System.out.println(query2);
			
			//6-2 데이터 입력
			String id2 ="java09";
			String name2="james";
			String pwd2 ="1234";
			int height2 =180;
			int weight2 =60;
			
			pstmt.setString(1, id2);  //1부터 시작
			pstmt.setString(2, name2);
			pstmt.setString(3, pwd2);
			pstmt.setInt(4,height2);
			pstmt.setInt(5,weight2);
			pstmt.executeUpdate();
			
					
			// 5.테이블 조회(ResultSet 데이터 위치 가지고 있다)
			String query = "select * from member";
			System.out.println(query);
			pstmt = conn.prepareStatement(query); //미리컴파일 :query가 prepareStatement에 들어가 먼저 컴파일 진행 된다.
			rs = pstmt.executeQuery(); // query 삭제

			while (rs.next()) {
				// rs.next() true이면 이하 실행
				// 한줄의 정보를 가져옴 (row)

				String id = rs.getString("id");
				String name = rs.getString("name");
				String pwd = rs.getString("pwd");
				int height = rs.getInt("height");
				int weight = rs.getInt("weight");

				System.out.print(id + " ");
				System.out.print(name + " ");
				System.out.print(pwd + " ");
				System.out.print(height + " ");
				System.out.print(weight + " ");

				System.out.println();
			}

			// DB 관련 데이터 들은 쌍이지 않도록 바로바로 종료해주어야 한다.
			rs.close();
			pstmt.close();
			conn.close();

		} catch (ClassNotFoundException e) {
			System.out.println("드라이버 로딩 실패");
		} catch (SQLException e) {
			System.out.println("오라클 연결 실패");
		}

	}

}

image.png