수색…


비고

PreparedStatement 는 실행되기 전에 명령문을 선언하고 매개 변수의 자리 표시자를 허용합니다. 이렇게하면 명령문을 서버에서 한 번 준비 (최적화) 한 다음 다른 매개 변수 세트로 재사용 할 수 있습니다.

매개 변수 자리 표시 자의 추가 이점은 SQL 삽입에 대한 보호 기능을 제공한다는 것입니다. 이는 매개 변수 값을 별도로 전송하거나 드라이버가 필요에 따라 값을 올바르게 이스케이프 처리하여 수행됩니다.

PreparedStatement에 대한 매개 변수 설정

쿼리 문자열의 자리 표시자는 set* 메서드를 사용하여 set* 해야합니다.

String sql = "SELECT * FROM EMP WHERE JOB = ? AND SAL > ?";

//Create statement to make your operations
PreparedStatement statement = connection.prepareStatement(sql);

statement.setString(1, "MANAGER"); // String value
statement.setInt(2, 2850);         // int value

특수한 상황들

NULL 값 설정 :

null 치의 설정은 setIntsetLong 메소드를 사용해 실시 할 수가 없습니다. 이것들은 객체 ( IntegerLong ) 대신에 원시 형 ( intlong )을 사용하므로 NullPointerException 이 Throw됩니다.

void setFloat(int parameterIndex, float x) 
void setInt(int parameterIndex, int x) 
void setLong(int parameterIndex, long x)  

이러한 경우는 setNull 을 사용하여 처리 할 수 ​​있습니다.

setNull(int parameterIndex, int sqlType)

형식화되었으므로 두 번째 매개 변수를 제공해야합니다 ( java.sql.Types 참조).

//setting a NULL for an integer value
statement.setNull(2, java.sql.Types.INTEGER);

LOB 설정

LOB에는 특수 오브젝트를 사용해야합니다.

Clob longContent = connection.createClob();
Writer longContentWriter = longContent.setCharacterStream(1); // position: beginning
longContentWriter.write("This will be the content of the CLOB");

pstmt = connection.prepareStatement("INSERT INTO CLOB_TABLE(CLOB_VALUE) VALUES (?)");
pstmt.setClob(1, longContent);

set* 메소드의 예외

SQLException - parameterIndex 가 SQL 문의 파라미터 마커에 대응하고 있지 않는 경우. 데이타베이스 액세스 에러가 발생했을 경우, 또는이 메소드가 클로즈 된 PreparedStatement 불려 PreparedStatement

SQLFeatureNotSupportedException - sqlType가 ARRAY , BLOB , CLOB , DATALINK , JAVA_OBJECT , NCHAR , NCLOB , NVARCHAR , LONGNVARCHAR , REF , ROWID , SQLXML 또는 STRUCT 데이터 형이며 JDBC 드라이버가이 데이터 형을 지원하지 않는 경우

준비된 진술의 기본 사용법

이 예에서는 매개 변수가있는 insert 문으로 준비된 문을 작성하고 해당 매개 변수에 값을 설정 한 다음 명령문을 실행하는 방법을 보여줍니다.

Connection connection = ... // connection created earlier
try (PreparedStatement insert = connection.prepareStatement(
        "insert into orders(id, customerid, totalvalue, comment) values (?, ?, ?, ?)")) {
    //NOTE: Position indexes start at 1, not 0
    insert.setInt(1, 1);
    insert.setInt(2, 7934747);
    insert.setBigDecimal(3, new BigDecimal("100.95"));
    insert.setString(4, "quick delivery requested");

    insert.executeUpdate();
}

삽입 문에서 물음표 ( ? )는 매개 변수 자리 표시 자입니다. 그것들은 나중에 setXXX 메서드를 사용하여 해당 매개 변수에 값을 설정하는 (1부터 시작하는 인덱스를 사용하여) 참조되는 위치 매개 변수입니다.

try-with-resources를 사용하면 명령문이 닫히고 해당 명령문에 사용 된 자원이 해제됩니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow