1:創(chuàng)建時的區(qū)別:
Statement statement = conn.createStatement();
PreparedStatement preStatement = conn.prepareStatement(sql);
執(zhí)行的時候:
ResultSet rSet = statement.executeQuery(sql);
ResultSet pSet = preStatement.executeQuery();
由上可以看出,PreparedStatement有預(yù)編譯的過程菠隆,已經(jīng)綁定sql解寝,之后無論執(zhí)行多少遍烹俗,都不會再去進(jìn)行編譯,
而 statement 不同隆箩,如果執(zhí)行多變呆盖,則相應(yīng)的就要編譯多少遍sql,所以從這點看那伐,preStatement 的效率會比 Statement要高一些.
preStatement是預(yù)編譯的,所以可以有效的防止 SQL注入等問題
2.prepareStatement可以替換變量
在SQL語句中可以包含?石蔗,可以用ps=conn.prepareStatement("select * from Cust where ID=?");
int sid=1001;
ps.setInt(1, sid);
rs = ps.executeQuery();
可以把?替換成變量罕邀。
而Statement只能用
int sid=1001;
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from Cust where ID="+sid);
來實現(xiàn)。