聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

Statement、PreparedStatement、CallableStatement有什么區別?三者區別的詳情介紹

來源:CSDN 時間:2023-03-06 07:58:38

JDBC:

Statement(接口)      | PreparedStatement(接口)      | CallableStatement(接口) 以上三者為繼承關系。

一、Statement


(資料圖片僅供參考)

用于執行不帶參數的簡單SQL語句,每次執行SQL語句,數據庫都要執行SQL語句的編譯,最好用于僅執行一次查詢并返回結果情形,效率高于PreparedStatement

stmt=con.createStatement();            stmt.execute("insert into employee values(1,"jim1",25)");rs=stmt.executeQuery("select * from employee");while(rs.next()){System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getInt(3));}

二、PreparedStatement:預編譯的SQL語句的對象

執行的SQL語句中是可以帶參數的,并支持批量執行SQL。

由于采用cache機制,則預先編譯的語句,就會放在cache中,下次執行相同SQL語句,則直接從cache中取出來

con=DriverManager.getConnection(url,user,password);pstmt=con.prepareStatement("update employee set age=? where id=?");pstmt.setInt(1, 30);pstmt.setInt(2, 3);pstmt.executeUpdate();

三、CallableStatement

提供了用來調用數據庫中存儲過程的接口,如果有輸出參數要注冊,說明是輸出參數

四、PreparedStatement與Statement區別

①代碼可讀性和可維護性更好

int id=4;String name="jim4";int age=24;stmt.execute("insert into employee values(""+id+"",""+name+"",""+age+"")");

②安全性更好

在SQL中有萬能鑰匙"OR 1="1,在Statement中是將參數直接放入SQL語句中連接到一起執行

String name="jim4 "OR 1="1";rs=stmt.executeQuery("select * from employee where name=""+name+""");

在PreparedStatement中,是將jim4 "OR 1="1作為一個字符串賦值給?,作為name字段對應的值,顯然這樣注入就無從談起了

③效率更高

每一種數據庫都會盡最大努力對預編譯語句提供最大的性能優化,因為預編譯語句有可能會被重復調用。當下次調用時無需編譯,只要將參數直接傳入編譯過的語句執行代碼中就會執行。

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦

關于我們 | 聯系我們 | 投稿合作 | 法律聲明 | 廣告投放

版權所有©2017-2020   太陽信息網京ICP備2021034106號-55

所載文章、數據僅供參考,使用前務請仔細閱讀網站聲明。本站不作任何非法律允許范圍內服務!

聯系我們:55 16 53 8 @qq.com

Top 岛国精品在线