2013-02-28 1 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-драйверов). –

ответ

3

драйвер JDBC precompiles в PreparedStatement к SQL заявление, которое включает в себя параметры отображения из типа данных Java с типом данных SQL.

Затем прекомпилированный оператор объединяется в базу данных Oracle.

PreparedStatement имеет следующие преимущества по сравнению с нормальным Заявление:

  • защита от SQL-инъекции нападение
  • если вы повторно использовать экземпляр PreparedStatement в Java с другими параметрами, драйвер JDBC не будет нужно PreCompile снова
  • База данных Oracle может повторно использовать скомпилированный оператор SQL

Но если вы не используете параметры запроса, то Statement and PreparedSta т. е. ведут себя одинаково.