728x90
반응형
SMALL
자바에서 db로 쿼리문을 전송할때 사용하는 2가지의 인터페이스
공통점
- 두 인터페이스 모두 sql질의문을 전달하는 역할
- 반드시 try~catch문 또는 throws처리를 해야함
Statement
정적 쿼리문을 처리하며 쿼리문에 값이 미리 입력되어 있어야한다.
import java.sql.Statement;
import java.sql.Connection;
import java.sql.SQLException;
public class StatementTest
{
public static void main(String args[])
{
Connection conn = null; // DB연결된 상태(세션)을 담은 객체
Statement stm = null; // SQL 문을 나타내는 객체
try {
conn = DBConnection.getConnection();
stm = conn.createStatement();
String quary = "INSERT INTO TEST VALUES('id1', 'pw1', 'name1')";
int success = stm.executeUpdate(quary);
if(success > 0)
System.out.println("데이터 입력 성공");
else
System.out.println("데이터 입력 실패");
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}
}
출처: https://all-record.tistory.com/79 [세상의 모든 기록]
PraparedStatement
SQL문장이 미리 컴파일되고, 실행 시간동안 인수값을 위한 공간을 확보할 수 있다는 점에서 Statement 객체와 다르다.
Statement 객체의 SQL은 실행될 때 매번 서버에서 분석해야 하는 반면, PreparedStatement 객체는 한 번 분석되면 재사용이 용이하다.
동일한 SQL문을 특정 값만 바꾸어서 여러 번 실행해야 할 때, 인수가 많아서 SQL문을 정리해야 될 필요가 있을 때 사용하면 유용하다.
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
public class PreparedStatementTest
{
public static void main(String args[])
{
Connection conn = null; // DB연결된 상태(세션)을 담은 객체
PreparedStatement pstm = null; // SQL 문을 나타내는 객체
try {
String quary = "INSERT INTO TEST VALUES(?, ?, ?)";
conn = DBConnection.getConnection();
pstm = conn.prepareStatement(quary);
// 쿼리에 값을 세팅한다.
// 여기서 1, 2, 3은 첫번째, 두번째, 세번째 위치홀더 라는 뜻
pstm.setString(1, "id2");
pstm.setString(2, "pw2");
pstm.setString(3, "name2");
int success = pstm.executeUpdate();
if(success > 0)
System.out.println("데이터 입력 성공");
else
System.out.println("데이터 입력 실패");
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}
}
출처: https://all-record.tistory.com/79 [세상의 모든 기록]
Statement 실행결과

PreparedStatement 실행결과

결국? 누구를 써야되지?
PreparedStatement를 사용하는 것이 좋다. PreparedStatement는 동적인 쿼리문을 처리할 수 있으므로 같은 SQL문에서 값만 변경하여 사용한다던가 인수가 많은 경우에 사용하기 좋다. 또한 미리 컴파일되기 때문에 수행 속도가 Statement보다 빠른 장점이 있다.
Statement 객체는 쿼리 실행시 값에 작은따옴표( ' )가 포함되어 있으면 작은따옴표를 두 개( ' ' ) 표시해야 한다. 예를 들어 입력할 값이 I ' am 이라고 하자. 그러면 쿼리문 작성시에 값을 I ' ' am 이렇게 입력해야 한다. 그러나 PreparedStatement 객체는 작은따옴표 문제를 쿼리 실행시 자동으로 처리하므로 신경쓸 필요가 없다는 장점이 있다.
728x90
반응형
LIST