Statement與PreparedStatement的使用

1、Statement的使用


(1)Statement:執行靜態SQL語句
(2)PreparedStatement:執行動態SQL語句
(3)CallableStatement:執行數據庫存儲過程

PreparedStatement的好處
     ①可維護性:雖然用PreparedStatement來代替Statement會使代碼多出幾行,
     但這樣的代碼無論從可讀性還是可維護性上來說都比直接用Statement的代碼高很多檔次
     ②執行效率:每一種數據庫都會盡最大努力對預編譯語句提供最大的性能優化.
     因爲預編譯語句有可能被重複調用,所以在任何時候就可以不需要再次編譯而可以直接執行,
     效率會提高很多
     ③安全性:這也是最重要的一點, PreparedStatement可以有效的防止“注入式攻擊”,
     極大地提高了執行SQL語句的安全性
預編譯:
——當客戶發送一條SQL語句給服務器後,服務器總是需要校驗SQL語句的語法格式是否正確,
    然後把SQL語句編譯成可執行的函數,最後纔是執行SQL語句。
    其中校驗語法,和編譯所花的時間可能比執行SQL語句花的時間還要多。
——注意:可執行函數存儲在MySQL服務器中,並且當前連接斷開後,MySQL服務器會清除已經存儲的可執行函數。
——如果我們需要執行多次insert語句,但只是每次插入的值不同,MySQL服務器也是需要每次都去校驗SQL語句的
    語法格式,以及編譯,這就浪費了太多的時間。
——如果使用預編譯功能,那麼只對SQL語句進行一次語法校驗和編譯,所以效率要高。

預編譯SQL語句分爲兩個過程:
——準備語句過程:將預編譯語句編譯成執行計劃,SQL語句只需編譯一次,供後續多次調用,編寫效率高
——執行語句過程:對於要多次執行的SQL語句,直接調用編譯得到的機器代碼段,執行效率高

示例
Insert語句
    String sql ="insert into stu(id,name) values(?,?)";
    PreparedStatement pst=connection.preparedStatement(sql);
    pst.setInt(1,3);
    pst.setString(2,"張三");
    int rs=pst.executeUpdate();
Update語句
    String sql ="update stu set name=? where id=?";
    PreparedStatement pst=connection.preparedStatement(sql);
    pst.setString(1,"李四");
    pst.setInt(2,3);
    int rs=pst.executeUpdate();
Delete語句
    String sql ="delete from stu where id=?";
    PreparedStatement pst=connection.preparedStatement(sql);
    pst.setInt(1,3);
    int rs=pst.executeUpdate();
Select語句
    String sql ="select * from stu where id=?";
    PreparedStatement ps=connection.preparedStatement(sql);
    ps.setInt(1,3);
    ResultSet rs=ps.executeQuery();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章