JDBC:Statement与PreparedStatement的联系与区别

1、联系

二者均是接口interface,其中Statement是PreparedStatement的父接口。用于jdbc的sql执行。

2、区别

二者的区别主要集中在静态与动态、执行过程细节方面。

2.1、静态与动态

Statement用于执行静态 SQL 语句并返回它所生成结果的对象。而PreparedStatement用于执行动态SQL语句并返回它所生成结果的对象,SQL 语句被预编译并存储在 PreparedStatement 对象中,然后可以使用此对象多次高效地执行该语句。

select colume from table where colume=1;//常量、静态

select colume from table where colume=?;//变量、动态

2.2执行细节

Statement为每一条SQL语句生成一个执行计划(每个SQL语句进行一次编译执行),而PreparedStatement通过变量设置的形式,实现了同类SQL语句只生成一个执行计划(同类SQL语句,一次预编译,多次执行),然后每次只需把问号置为相应的值。
这样在执行效率上,单次执行Statement效率高于PreparedStatement,多次重复性执行(批量处理)Statement效率低于PreparedStatement。

Connection con = DriverManager.getConnection(url, user, pwd);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(“select * from userinfo”);

2.3安全性

传递给PreparedStatement对象的参数可以被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配。另外PreparedStatement可以防止SQl注入。

Connection con = DriverManager.getConnection(url, user, pwd);
PreparedStatement updateSales=con.prepareStatement(“UPDATE COFFEES SETSALES = ? WHERE COF_NAME LIKE ? “);
updateSales.setInt(1, 75);
updateSales.setString(2, “Colombian”);
updateSales.executeUpdate();

3、参考

jdbc代码
Statement与PreparedStatement

猜你喜欢

转载自blog.csdn.net/phs999/article/details/78079172