sos...java怎样调用存储过程?

landii 2000-09-05 12:18:00
最好举个例子.
...全文
145 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
p9 2000-09-05
  • 打赏
  • 举报
回复
下面是调用 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 ();
}
leslielu 2000-09-05
  • 打赏
  • 举报
回复
我不知道你指的是什么数据库的存储过程.
在SQL7.0中,我是直接调用的.
举个例子:
public void CreatTable(String stable)
{
String strSql="sp_creatmail '"+stable+"'";
try{
stmt.executeUpdate(strSql);
}catch(Exception e)
{
}
}
其实,都是一个SQL的指令,所以完全可以和你直接调用标准的SQL一样调用,如果有返回集,使用
executeQuery().


62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧