大多数关系数据库分四步处理JDBC / SQL查询:
有人可以在下面的代码中解释我这些步骤
Statement st=con.createStatement();
ResultSet rset=st.executeQuerry("Select * from tab");
PrepareStatement stm=con.preparedStatement("select * from tab");
ResulSet rset=stm.executeQuerry();
上面会有什么区别?
答案 0 :(得分:0)
PrepareStatement
是预编译的,因此会更快。如果你在select语句中有条件,Statement
sql查询需要SQL注入,而使用PrepareStatement
则可以安全地使用SQL注入。
当您拥有INSERT
,UPDATE
,DELETE
等DML语句时也是如此。
答案 1 :(得分:0)
Prepared Statement
查询是在数据库上预编译的,并且将重用访问计划来执行进一步的查询,这使得它们比Statement
对象生成的常规查询执行得快得多。
Prepared Statement
还允许您编写动态和参数查询。使用参数查询和PreparedStatement
可以防止多种形式的SQL注入,因为作为占位符一部分传递的所有参数都将自动转义JDBC驱动程序。
答案 2 :(得分:0)
差异在多次调用方面是可见的,因为PreparedStatements
以预编译格式存储,如果驱动程序支持预编译,则con.preparedStatement("select * from tab");
会将语句发送到数据库预编译。您可以在此处看到差异:
http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#createStatement()
http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#prepareStatement(java.lang.String)