java.sql.PreparedStatement 클래스 이다.
Statement 객체를 상속하고 SQL문을 미리 컴파일 해서 재사용하기 때문에 훨씬 빨리 데이터 베이스 작업을 수행한다.
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("오라클 연결 실패");
}
}
}
