Statement는 db와 연결되어있는 connection 객체를 통해 sql문을 db에 전달하여 실행하고, 결과를 리턴받아주는 객체입니다.
위키백과에 나온 사전적 의미로는 컴퓨터 프로그래밍에서 문은 명령형 프로그래밍 언어의 가장 작은 독립요소이다. 프로그램은 하나 이상의 문이 연결되어 형성된다. 문은 식과 같은 내부요소를 포함할 수 있다. C를 포함한 많은 프로그래밍 언어는실행 코드와 정의를 포함하는 문과 더불어 문과 정의 사이에 구별을 둔다. 단순 문과 복합 문 사이에 구별을 둘 수 있다. 뒤에 나오는 것은 구성 요소로서의 문을 포함한다. 라고 나옵니다.
PreparedStatement는 Statement를 상속받았기 때문에, statement와 거의 비슷하지만, sql문을 컴파일 할 때
?를 사용하여 preCompile 하여 미리 준비해놓고, 실행하여 리턴받습니다. 준비해놓았다는 말처럼 속도면에서 Statement보다 더 빠르겠지요?
package com.test01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MTest02 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// ojdbc6.jar(꼭 추가 해야함! ) -> oracle.jdbc.driver.OracleDriver
// jar파일?
// 1. dirver연결
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. 계정 연결
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "kh";
String password = "kh";
Connection con = DriverManager.getConnection(url, user, password);
// 3. query 준비
String sql = " SELECT * FROM EMP ";
Statement stmt = con.createStatement();
// 4. query 실행 및 리턴
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.printf("%5d %11s %9s %5d %10s %8.2f %8.2f %2d \n",
rs.getInt(1), rs.getString(2), rs.getString("JOB"), rs.getInt(4),
rs.getDate(5), rs.getDouble("SAL"), rs.getDouble(7), rs.getInt(8));
}
// 5. db종료
rs.close();
stmt.close();
con.close();
}
}
위의 코드는 JDBC_01에서 사용했던 코드입니다.
해당 코드는 Statement를 이용하여 작성 되었는데요.
이를 PreparedStatement로 바꾸어보겠습니다.
package com.test01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MTest01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1. 드라이버 연결
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. 계정연결
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "kh";
String password = "kh";
Connection con = DriverManager.getConnection(url, user, password);
// 3. 쿼리 준비
String sql = " SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM EMP ";
PreparedStatement pstm = con.prepareStatement(sql);
// 4.쿼리 실행 및 리턴
ResultSet rs = pstm.executeQuery();
while(rs.next()) {
System.out.printf("%5d %11s %9s %5d %10s %8.2f %8.2f %2d \n",
rs.getInt(1), rs.getString("ENAME"), rs.getString(3), rs.getInt("MGR"),
rs.getDate(5), rs.getDouble("SAL"), rs.getDouble(7), rs.getInt("DEPTNO"));
}
// 5. db종료
rs.close();
pstm.close();
con.close();
}
}
겉보기에는 Statement와 PreparedStatement가 무슨차이가 있나 싶겠지만...
SQL 명령이 SELECT가 아니라 INSERT, UPDATE, DELETE라면 차이가 조금씩 느껴지실겁니다!
다음 포스팅 부터는 전체 SELECT가 아닌 조건에 맞는 1개의 ROW만 보는 명령부터 INSERT UPDATE DELETE명령까지 순차적으로 보겠습니다!
'Java 관련 > JDBC' 카테고리의 다른 글
[JDBC] MVC 패턴(Model View Controller) (0) | 2022.03.06 |
---|---|
[JDBC] delete(데이터 삭제) (0) | 2022.03.05 |
[JDBC] update(데이터 수정) (0) | 2022.03.04 |
[JDBC] selectOne(선택 출력하기) (0) | 2022.03.02 |
[JDBC] JDBC(Java DataBase Connectivity)연결순서 (0) | 2022.02.28 |