预处理语句在jvm或db中预编译的位置



当阅读不同的帖子时,一个问题出现在脑海中,在哪里准备语句预编译,在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数据库中池化。

与普通语句相比,

PreparedStatement具有以下优点:

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

但是如果你不使用查询参数,那么Statement和PreparedStatement的行为方式是一样的

相关内容

  • 没有找到相关文章

最新更新