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

landii 2000-09-05 12:18:00
最好举个例子.
...全文
146 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().


〖程序设计基础〗练习题1一、选择题(每题1分,共30分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项的标记写在题干后的括号内。1.以下的选项中能正确表示Java语言中的一个整型常量的是( )。A) 12. B) -20 C) 1,000 D) 4 5 62.以下选项中,合法的赋值语句是( )。A) a = = 1; B) ++ i; C) a=a + 1= 5; D) y = int ( i );3.若所用变量都已正确定义,以下选项中,非法的表达式是( )。A) a != 4||b==1 B) 'a' % 3 C) 'a' = 1/2 D) 'A' + 324.若有定义int a = 2;则执行完语句a += a -= a * a; 后,a的值是( )。A) 0 B) 4 C) 8 D) -45.设有定义语句int a[]={66,88,99}; 则以下对此语句的叙述错误的是( )。A) 定义了一个名为a的一维数组 B) a数组有3个元素C) a数组的下标为1~3 D)数组中的每个元素是整型6.若a和b均是整型变量并已正确赋值,正确的switch语句是( )。A) switch(a+b); B) switch( a+b*3.0 ){ ...... } { ...... }C) switch a D) switch ( a%b ){ ...... } { ...... }7.下列语句序列执行后,x 的值是( )。int a=3, b=4, x=5;if( ++aA) 5 B) 3 C) 4 D) 68.下列语句序列执行后,k 的值是( )。int i=6, j=8, k=10, n=5, m=7;if( iA) 9 B) 10 C) 11 D) 129.下列语句序列执行后,r 的值是( )。char ch='8'; int r=10;switch( ch+1 ){ case '7': r=r+3;case '8': r=r+5;case '9': r=r+6; break;default: ;}A) 13 B) 15 C) 16 D) 1010.下列语句序列执行后,j 的值是( )。int j=0;for( int i=3; i>0; i-- ) j+=i;A) 3 B) 4 C) 5 D) 611.下列语句序列执行后,j 的值是( )。int j=9, i=6;while( i-- >3 ) --j;A) 5 B) 6 C) 7 D) 812.下列语句序列执行后,i的值是( )。int i=10;do { i-=2; } while( i>6 );A) 10 B) 8 C) 6 D) 413.为了区分重载多态中同名的不同方法,要求( )。A) 采用不同的形式参数列表 B) 返回值类型不同 C) 调用时用类名或对象名做前缀 D) 参数名不同14.定义主类的类头时可以使用的访问控制符是( )。A) private B) protected C) public D) private protected15.下列整型的最终属性 i 的定义中,正确的是( )。A) static final int i=100; B) final i;C) static int i; D) final float i=1.2f; 16.设 x,y 均为已定义的类名,下列声明对象x1的语句中正确的是( )。A) public x x1= new y( ); B) x x1=x( ); C) x x1=new x( ); D) int x x1;17.下列方法定义中,正确的是( )。A) int x( int a,b ) B) double x( int a,int b){ return (a-b); } { int w; w=a-b; }C) double x( a,b ) D) int x( int a,int b){ return b; } { return a-b; }18.能构成多分支的语句是( )。A) for 语句 B) while 语句 C) switch 语句 D) do -

62,612

社区成员

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

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