Jdbc prepared语句在哪里预编译,在jvm中还是在db中?

Jdbc prepared语句在哪里预编译,在jvm中还是在db中?,jdbc,prepared-statement,precompiled,Jdbc,Prepared Statement,Precompiled,当阅读不同的帖子时,脑海中会闪过一个问题:prepared语句是在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 Prepar

当阅读不同的帖子时,脑海中会闪过一个问题:prepared语句是在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"));
    }       
}

}

JDBC驱动程序将PreparedStatement预编译为SQL语句,该语句涉及将参数从Java数据类型映射到SQL数据类型

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

与普通报表相比,编制报表具有以下优点:

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

但如果不使用查询参数,则语句和PreparedStatement的行为相同。

为什么要知道?JDBC是一个API,它取决于各种实现(JDBC驱动程序)的实际情况。