乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       知識存儲館 2014-08-07

      比如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();

      其中的關鍵在于哪兒呢?

      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ǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多