Jdbc prepared语句在哪里预编译,在jvm中还是在db中?
当阅读不同的帖子时,脑海中会闪过一个问题:prepared语句是在jvm中还是在db中预编译的?这个过程实际上是什么时候在java类中发生的。示例如下:=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
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驱动程序)的实际情况。