1. 程式人生 > >JDBC中Statement介面和PreparedStatement介面的差異性

JDBC中Statement介面和PreparedStatement介面的差異性

Statement:用於執行SQL語句的工具介面。該物件及可以執行DDL/DCL語句,也可以用於執行DML語句,還可以用於執行SQL查詢,返回查詢到的結果集。常用方法如下:
                ResultSet executeQuery(String sql)throws SQLException:該方法使用者執行查詢語句,並返回查詢結果對應的ResultSet對像。該方法只能用於執行查詢語句。
                int executeUpdate(String sql)throws SQLException:該方法用於執行DML語句,並返回受影響的行數;該方法也可以用於執行DDL語句,執行DDl語句將返回為0;
                boolean execute(String sql)throws SQLException:該方法可以執行任何SQL語句。如果執行後第一個結果為ResultSet物件,則返回TRUE;如果執行後第一個結果為受影響的行        數或者沒有任何結果,則返回false;

PreparedStatement:同樣有executeUpdate() executeQuery()   execute()三個方法,只是這個三個方法無需接收SQL字串,因為PrepareStatement物件已經與變異了SQL命令,只要為這些命令傳入引數即可。
                針對經常需要反覆執行一條結構相似的SQL語句,例如如下SQL語句:
        insert into student values("zhangsan","123");
        insert into student values("lisi","456");
對於這兩條SQL語句而言,他們的結構基本相似,只是執行插入時插入的值不同而已。對於這種情況,可以使用帶佔位符(?)引數的SQL語句來來代替它;
insert into student values(?,?);
但是Statement執行SQL 語句查詢時不允許使用佔位符引數,而且這個問號佔位符引數必須獲得值後才可以執行。為了滿足這種功能,JDBC提供了PreparedStatement介面,它是statement介面的字介面,可以預編譯SQL語句,編譯後的SQL語句被儲存在PreparedStatement物件中,然後可以使用該物件多次高效地執行該語句。簡而言之,使用PreparedStatement比使用Statement的效率更高。