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