我不知道你指的是什么数据库的存储过程.
在SQL7.0中,我是直接调用的.
举个例子:
public void CreatTable(String stable)
{
String strSql="sp_creatmail '"+stable+"'";
        try{
             stmt.executeUpdate(strSql);
           }catch(Exception e)
           {
           }
}
其实,都是一个SQL的指令,所以完全可以和你直接调用标准的SQL一样调用,如果有返回集,使用
executeQuery().

解决方案 »

  1.   

    下面是调用 DB2 数据库存储过程的例子,如果是SQLSERVER,或ORACLE
    则可能要把 CALL 改为 Execute.应该类似。
      public static void callStoredProc (Connection con,
                                         String tableName,
                                         String name,
                                         int percentModification,
                                         String department) throws Exception
      {
        // prepare the CALL statement
        CallableStatement stmt;
        String sql = "Call " + name + "(?,?,?,?,?,?,?,?,?) ";
        stmt = con.prepareCall (sql);    // register the output parameters
        stmt.registerOutParameter (4, Types.DOUBLE);
        stmt.registerOutParameter (5, Types.DOUBLE);
        stmt.registerOutParameter (6, Types.DOUBLE);
        stmt.registerOutParameter (7, Types.DOUBLE);
        stmt.registerOutParameter (8, Types.INTEGER);
        stmt.registerOutParameter (9, Types.CHAR);    // set all parameters (input and output)
        double totalPayrollBefore = 0.00;
        double totalPayrollAfter = 0.00;
        double averageSalaryBefore = 0.00;
        double averageSalaryAfter = 0.00;
        String medianEmployeeName = "This field is not defined yet";
        int numberOfUpdates = 0;
        stmt.setString (1, tableName);
        stmt.setInt (2, percentModification);
        stmt.setString (3, department);
        stmt.setDouble (4, totalPayrollBefore);
        stmt.setDouble (5, totalPayrollAfter);
        stmt.setDouble (6, averageSalaryBefore);
        stmt.setDouble (7, averageSalaryAfter);
        stmt.setInt (8, numberOfUpdates);
        stmt.setString (9, medianEmployeeName);    // call the stored procedure
        System.out.println ("\n  Calling stored procedure: " + name);
        stmt.execute ();
        System.out.println ("\n  Returned from stored procedure: " + name);    // retrieve output parameters
        BigDecimal totPayBefore = new BigDecimal (stmt.getDouble (4));
        BigDecimal totPayAfter = new BigDecimal (stmt.getDouble (5));
        BigDecimal avgSalBefore = new BigDecimal (stmt.getDouble (6));
        BigDecimal avgSalAfter = new BigDecimal (stmt.getDouble (7));
        numberOfUpdates = stmt.getInt (8);
        medianEmployeeName = stmt.getString (9);    // display the information returned from the stored procedure
        System.out.println ();
        System.out.println ("              Percent modification:   " +
                            percentModification + "%");
        System.out.println ("         Department being modified:   " +
                            department);
        System.out.println ();
        System.out.println ("              Total payroll before: $ " +
                            totPayBefore.setScale (2, totPayBefore.ROUND_HALF_UP));
        System.out.println ("             Average salary before: $ " +
                            avgSalBefore.setScale (2, avgSalBefore.ROUND_HALF_UP));
        System.out.println ();
        System.out.println ("    Number of salary modifications:   " +
                            numberOfUpdates);
        System.out.println ();
        System.out.println ("               Total payroll after: $ " +
                            totPayAfter.setScale (2, totPayAfter.ROUND_HALF_UP));
        System.out.println ("              Average salary after: $ " +
                            avgSalAfter.setScale (2, avgSalAfter.ROUND_HALF_UP));
        System.out.println ();
        System.out.println ("              Median Employee Name:   " +
                            medianEmployeeName);    stmt.close ();
      }