JDBC(Java Database Connectivity,java數據庫連接)的API中的主要的四個類之一的java.sql.Statement要求開發者付出大量的時間和精力。在使用Statement獲取JDBC訪問時所具有的一個共同的問題是輸入適當格式的日期和時間戳:2002-02-05 20:56 或者 02/05/02 8:56 PM。
通過使用java.sql.PreparedStatement,這個問題可以自動解決。一個PreparedStatement是從java.sql.Connection對象和所提供的SQL字符串得到的,SQL字符串中包含問號(?),這些問號標明變量的位置,然後提供變量的值,最後執行語句,例如:
Stringsql = "SELECT * FROM People p WHERE p.id = ? AND p.name = ?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1,id);
ps.setString(2,name);
ResultSet rs = ps.execute();
使用PreparedStatement的另一個優點是字符串不是動態創建的。下面是一個動態創建字符串的例子:
Stringsql = "SELECT * FROM People p WHERE p.i = "+id;
這答應JVM(JavaVirtual Machine,Java虛擬機)和驅動/數據庫緩存語句和字符串並提高性能。
PreparedStatement也提供數據庫無關性。當顯示聲明的SQL越少,那麼潛在的SQL語句的數據庫依靠性就越小。
由於PreparedStatement具備很多優點,開發者可能通常都使用它,只有在完全是因為性能原因或者是在一行SQL語句中沒有變量的時候才使用通常的Statement。