九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Java調(diào)用SQL Server存儲過程同時返回參數(shù)和結(jié)果集

比如SQL Server的一個存儲過程:

 

  1. create procedure proc_test 
  2. @q_type int,
  3. @value int,
  4. @count int output
  5. as
  6. begin
  7.      update mytable set value = @value where type = @q_type
  8.      set @count = @@rowcount
  9.      select * from mytable where type = @q_type
  10. end
  11. go

這個存儲過程,既有輸出參數(shù),又有返回結(jié)果集,而用java調(diào)用他,兩者都要取到,則代碼如下:

 

  1. Connection conn = MyConnectionPool.getConnection();
  2. CallableStatement cstmt = conn.prepareCall("{call proc_test(?,?,?)}");
  3. cstmt.setInt(1, type);
  4. cstmt.setInt(2, value);
  5. cstmt.registerOutParameter(3, java.sql.Types.INTEGER);
  6. ResultSet rs = cstmt.executeQuery();
  7. while(rs.next()) {
  8.    doSomeThingToResultSet(rs);
  9. }
  10. doSomeThingToOutParameter(cstmt.getInt(3));
  11. rs.close();
  12. cstmt.close();
  13. conn.close();

其中的關(guān)鍵在于哪兒呢?

  1. 必須用cstmt.executeQuery()來取得結(jié)果集,用cstmt.execute()然后getResultSet()是取不到的,而executeQuery()能保證先執(zhí)行update再select;
  2. 獲得輸出參數(shù)的cstmt.getInt(3)必須在處理完結(jié)果集的所有內(nèi)容后再執(zhí)行,如果把上述代碼改成如下:

........
doSomeThingToOutParameter(cstmt.getInt(3));
while(rs.next()) {
   doSomeThingToResultSet(rs);
}
........

       后果就是,在rs.next()的時候,會拋出異常:java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
java調(diào)用存儲過程無法取得返回參數(shù)
Java的數(shù)據(jù)庫連接編程(JDBC)技術(shù)
數(shù)據(jù)庫--存儲過程簡介
Java連接并操作SQLServer數(shù)據(jù)庫
Java調(diào)用SQL Server的存儲過程詳解
java 調(diào)用mysql存儲過程
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服