JDBC(java Database Connectivity,java數(shù)據(jù)庫(kù)連接)的API中的主要的四個(gè)類之一的java.sql.Statement要求開發(fā)者付出大量的時(shí)間和精力。在使用Statement獲取JDBC訪問時(shí)所具有的一個(gè)共同的問題是輸入適當(dāng)格式的日期和時(shí)間戳:2002-02-05 20:56 或者 02/05/02 8:56 PM。
通過使用java.sql.PReparedStatement,這個(gè)問題可以自動(dòng)解決。一個(gè)PreparedStatement是從java.sql.Connection對(duì)象和所提供的SQL字符串得到的,SQL字符串中包含問號(hào)(?),這些問號(hào)標(biāo)明變量的位置,然后提供變量的值,最后執(zhí)行語句,例如:
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的另一個(gè)優(yōu)點(diǎn)是字符串不是動(dòng)態(tài)創(chuàng)建的。下面是一個(gè)動(dòng)態(tài)創(chuàng)建字符串的例子:
Stringsql = "SELECT * FROM People p WHERE p.i = "+id;
這答應(yīng)JVM(JavaVirtual Machine,Java虛擬機(jī))和驅(qū)動(dòng)/數(shù)據(jù)庫(kù)緩存語句和字符串并提高性能。
PreparedStatement也提供數(shù)據(jù)庫(kù)無關(guān)性。當(dāng)顯示聲明的SQL越少,那么潛在的SQL語句的數(shù)據(jù)庫(kù)依靠性就越小。
由于PreparedStatement具備很多優(yōu)點(diǎn),開發(fā)者可能通常都使用它,只有在完全是因?yàn)樾阅茉蚧蛘呤窃谝恍蠸QL語句中沒有變量的時(shí)候才使用通常的Statement。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注