4

さまざまな投稿を読んでいると、疑問が浮かびました。プリペアドステートメントは、jvmまたはdbのどこでプリコンパイルされていますか?そして、プロセスが実際にJavaクラスで発生するのはいつですか。以下の例:=

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


public class PreparedStmtDemo {

public static void main(String args[]) throws SQLException,Exception {

    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
    PreparedStatement preStatement = conn.prepareStatement("select RollNo from student where Stream =?");
    preStatement.setString(1, "Commerce");

    ResultSet result = preStatement.executeQuery();

    while(result.next()){
        System.out.println("Roll No: " + result.getString("RollNo"));
    }       
}

}

4

1 に答える 1

3

JDBCドライバーは、PreparedStatementをJavaデータ型からSQLデータ型へのパラメーターのマッピングを含むSQLステートメントにプリコンパイルします。

次に、プリコンパイルされたステートメントがOracleデータベースにプールされます。

PreparedStatementには、通常のステートメントに比べて次の利点があります。

  • SQLインジェクション攻撃に対する保護
  • JavaでPreparedStatementインスタンスを他のパラメーターとともに再利用する場合、JDBCドライバーはそれを再度プリコンパイルする必要はありません。
  • OracleデータベースはプールされたSQLステートメントを再利用できます

ただし、クエリパラメータを使用しない場合、StatementとPreparedStatementは同じように動作します。

于 2013-03-07T19:59:48.437 に答える