關(guān)于Statement對象:
????前面說過,Statement對象是用來綁定要執(zhí)行的操作的,在它上面有三種執(zhí)行方法:
即用來執(zhí)行查詢操作的executeQuery(),用來執(zhí)行更新操作的executeUpdate()和用來執(zhí)行
動態(tài)的未知的操作的execute().
????JDBC在編譯時并不對要執(zhí)行的SQL語句檢測,只是把它看著一個String,只有在驅(qū)動
程序執(zhí)行SQL語句時才知道正確與否.
????一個Statement對象同時只能有一個結(jié)果集在活動.這是寬容性的,就是說即使沒有
調(diào)用ResultSet的close()方法,只要打開第二個結(jié)果集就隱含著對上一個結(jié)果集的關(guān)閉.所以
如果你想同時對多個結(jié)果集操作,就要創(chuàng)建多個Statement對象,如果不需要同時操作,那么可
以在一個Statement對象上須序操作多個結(jié)果集.
????
????這里我不得不特別說明一下,很多人會用一個Statement進行嵌套查詢,然后就來問
我說為什么不能循環(huán)?道理上面已經(jīng)說清楚了.我們來詳細分析一下嵌套查詢:
????Connection?conn?=?null;
????Statement?stmt?=?null;
????conn?=?.......;
????stmt?=?conm.createStatement(xxxxxx);
????ResultSet?rs?=?stmt.executeQuery(sql1);
????while(rs.next()){
????????str?=?rs.getString(xxxxx);
????????ResultSet?rs1?=?stmt.executeQuery(\"select?*?from?表?where?字段=str\");
????}
當stmt.executeQuery(\"select?*?from?表?where?字段=str\");賦給rs1時,這時隱含的操作
是已經(jīng)關(guān)閉了rs,你還能循環(huán)下去嗎?
所以如果要同時操作多個結(jié)果集一定要讓它他綁定到不同的Statement對象上.好在一個connection
對象可以創(chuàng)建任意多個Statement對象,而不需要你重新獲取連結(jié).

????關(guān)于獲取和設(shè)置Statement的選項:只要看看它的getXXX方法和setXXX方法就明白了,這兒
作為基礎(chǔ)知識只提一下以下幾個:
????setQueryTimeout,設(shè)置一個SQL執(zhí)行的超時限制.
????setMaxRows,設(shè)置結(jié)果集能容納的行數(shù).
????setEscapeProcessing,如果參數(shù)為true,則驅(qū)動程序在把SQL語句發(fā)給數(shù)據(jù)庫前進行轉(zhuǎn)義替
換,否則讓數(shù)據(jù)庫自己處理,當然這些默認值都可以通過get方法查詢.

????Statement的兩個子類:
????PreparedStatement:對于同一條語句的多次執(zhí)行,Statement每次都要把SQL語句發(fā)送給數(shù)據(jù)
庫,這樣做效率明顯不高,而如果數(shù)據(jù)庫支持預編譯,PreparedStatement可以先把要執(zhí)行的語句一次發(fā)
給它,然后每次執(zhí)行而不必發(fā)送相同的語句,效率當然提高,當然如果數(shù)據(jù)庫不支持預編譯,
PreparedStatement會象Statement一樣工作,只是效率不高而不需要用戶工手干預.
????另外PreparedStatement還支持接收參數(shù).在預編譯后只要傳輸不同的參數(shù)就可以執(zhí)行,大大
提高了性能.
????????
????PreparedStatement?ps?=?conn.prepareStatement(\"select?*?from?表?where?字段=?\");
????ps.setString(1,參數(shù));
????ResultSet?rs?=?ps.executeQuery();
????
????CallableStatement:是PreparedStatement的子類,它只是用來執(zhí)行存儲過程的.
????CallableStatement?sc?=?conn.prepareCall(\"{call?query()}\");
????ResultSet?rs?=?cs.executeQuery();
????
????關(guān)于更高級的知識我們在JDBC高級應用中介紹.?