2013-02-28 69 views
4

当阅读不同的帖子时,脑海里出现了一个问题在jvm或db中,预编译语句是在哪里预编译的?什么时候这个过程实际上发生在一个java类中。实施例以下:=准备语句预编译在jvm或db中?

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")); 
    }  
} 

}

+0

你为什么想知道? JDBC是一种API,它取决于各种实现(JDBC驱动程序)的真实情况。 – 2013-02-28 20:29:03

回答

3

JDBC驱动预编译的PreparedStatement到其涉及从Java数据类型映射参数,以SQL数据类型的SQL语句。

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

的PreparedStatement拥有正常的声明如下优点:

  • 防止SQL注入攻击
  • ,如果你重复使用与其他参数的Java PreparedStatement的情况下,JDBC驱动程序不会需要再次预编译它
  • Oracle数据库可以重复使用池化SQL语句

但是,如果您不使用查询参数,那么Statement和PreparedSta tement的行为方式相同。