怎样在JAVA里面用返回参数的存储过程

解决方案 »

  1.   

    作为示例,在 SQL Server 2005 AdventureWorks 示例数据库中创建以下存储过程:CREATE PROCEDURE GetImmediateManager
       @employeeID INT,
       @managerID INT OUTPUT
    AS
    BEGIN
       SELECT @managerID = ManagerID 
       FROM HumanResources.Employee 
       WHERE EmployeeID = @employeeID
    END根据指定的整数 IN 参数 (employeeID),该存储过程也返回单个整数 OUT 参数 (managerID)。根据 HumanResources.Employee 表中包含的 EmployeeID,OUT 参数中返回的值为 ManagerID。在以下示例中,将 AdventureWorks 示例数据库的打开连接传递给此函数,然后使用 execute 方法调用 GetImmediateManager 存储过程:public static void executeStoredProcedure(Connection con) {
       try {
          CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");
          cstmt.setInt(1, 5);
          cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
          cstmt.execute();
          System.out.println("MANAGER ID: " + cstmt.getInt(2));
       }
       catch (Exception e) {
          e.printStackTrace();
       }
    }
      

  2.   

    public String executeProc(String p)
        {
            ResultSet myrs = null;
            String sql  = "{call PROC_AUTOID(?,?)}";
            String temp = "";
            String tempid = "";
            
            try
            {
                //if(conn != null)
                //    conn.close();
                //conn = DriverManager.getConnection(sConnStr, UseName, PassWord);
                conn = this.Getconn();
                CallableStatement callablestatement = conn.prepareCall(sql);
                callablestatement.setString(1, p);
                callablestatement.registerOutParameter(2, 1);
                myrs = callablestatement.executeQuery();
                myrs.next();
                temp   = myrs.getString(1);
                tempid = callablestatement.getString(2);
                myrs.close();
                myrs = null;
                callablestatement.close();
                callablestatement = null;
            }
            catch(Exception e)
            {
             System.err.println("executeProc:" + e.getMessage());
             log.WriteFile("ExecProc:"+e.getMessage());
            }
            finally 
            {
              myrs = null;
            }
            return tempid.trim();
        }
        //一进一去的参数