天天看點

為什麼JDBC 中用 PrepareStatement 而不用 Statement

一、PrepareStatement是預編譯的,比Statement速度快

每一種資料庫都會盡最大努力對預編譯語句提供最大的性能優化;因為預編譯語句有可能被重複調用.是以語句在被DB的編譯器編譯後的執行代碼被緩存下來,那麼下次調用時隻要是相同的預編譯語句就不需要編譯,隻要将參數直接傳入編譯過的語句執行代碼中(相當于一個函數)就會得到執行;這并不是說隻有一個Connection中多次執行的預編譯語句被緩存,而是對于整個DB中,隻要預編譯的語句文法和緩存中比對,那麼在任何時候就可以不需要再次編譯而可以直接執行;而statement的語句中,即使是相同一操作,而由于每次操作的資料不同是以使整個語句相比對的機會極小,幾乎不太可能比對。

二、PrepareStatement對比Statement更具有安全性

Statement采用的方法是先組裝SQL語句,然後進行sql指令的執行,容易出現錯誤

例如:

為什麼JDBC 中用 PrepareStatement 而不用 Statement
為什麼JDBC 中用 PrepareStatement 而不用 Statement
為什麼JDBC 中用 PrepareStatement 而不用 Statement

如果我們把[' or '1' = '1]作為kspwd傳入進來 照樣能成功

但是用PrepareStatement就完全不一樣

為什麼JDBC 中用 PrepareStatement 而不用 Statement
為什麼JDBC 中用 PrepareStatement 而不用 Statement

事實證明:PrepareStatement方法更加安全快捷