jdbc connection是否可以創建多個statement

關於Statement對象:
  前面說過,Statement對象是用來綁定要執行的操作的,在它上面有三種執行方法:
即用來執行查詢操作的executeQuery(),用來執行更新操作的executeUpdate()和用來執行
動態的未知的操作的execute().
  JDBC在編譯時並不對要執行的SQL語句檢測,只是把它看着一個String,只有在驅動
程序執行SQL語句時才知道正確與否.
  一個Statement對象同時只能有一個結果集在活動.這是寬容性的,就是說即使沒有
調用ResultSet的close()方法,只要打開第二個結果集就隱含着對上一個結果集的關閉.所以
如果你想同時對多個結果集操作,就要創建多個Statement對象,如果不需要同時操作,那麼可
以在一個Statement對象上須序操作多個結果集.
  
  這裏我不得不特別說明一下,很多人會用一個Statement進行嵌套查詢,然後就來問
我說爲什麼不能循環?道理上面已經說清楚了.我們來詳細分析一下嵌套查詢:
  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時,這時隱含的操作
是已經關閉了rs,你還能循環下去嗎?
所以如果要同時操作多個結果集一定要讓它他綁定到不同的Statement對象上.好在一個connection
對象可以創建任意多個Statement對象,而不需要你重新獲取連結.

另外PreparedStatement還支持接收參數.在預編譯後只要傳輸不同的參數就可以執行,大大
提高了性能.
    
  PreparedStatement ps = conn.prepareStatement(\"select * from 表 where 字段=?\");
  ps.setString(1,參數);
  ResultSet rs = ps.executeQuery();
  
  CallableStatement:是PreparedStatement的子類,它只是用來執行存儲過程的.
  CallableStatement sc = conn.prepareCall(\"{call query()}\");
  ResultSet rs = cs.executeQuery();


來自:http://blog.csdn.net/snowwhitewolf/article/details/39609629

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章