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 预编译为 SQL 语句,该语句涉及将参数从 Java 数据类型映射到 SQL 数据类型。

然后将预编译语句汇集到 Oracle 数据库中。

PreparedStatement 与普通 Statement 相比具有以下优点:

  • 防止 SQL 注入攻击
  • 如果您在 java 中使用其他参数重用 PreparedStatement 实例,则 JDBC 驱动程序不需要再次预编译它
  • Oracle 数据库可以重用池化的 SQL 语句

但是,如果您不使用查询参数,则 Statement 和 PreparedStatement 的行为方式相同。

于 2013-03-07T19:59:48.437 回答