2011-12-21 71 views
-1

我已經創建了用於更新查詢的MySQL存儲過程。我怎麼可以將參數值傳遞給MySql存儲過程

delimiter // 
create procedure studentrcs(sname varchar(20),smark1 int(3),smark2 int(3),stotal int(10),inout Regno int(6)) 
begin 
UPDATE studentrecords set student_name=sname,mark1=smark1,mark2=smark2,total=stotal where Reg_no=Regno; 
end;// 

之後,通過調用語句我怎麼能傳遞價值(在運行時)爲參數的

CallableStatement calstat=null;  
calstat=conn.prepareCall("{call studentrcs(?,?,?,?,?)}"); // **how i can pass the value here(at run time).** 
      //System.out.println("Update"); 
        calstat.setString(1,tname.getText()); 
        calstat.setString(2, treg.getText()); 
        calstat.setString(3, tmark1.getText()); 
        calstat.setString(4, tmark2.getText()); 
        calstat.setString(5, ttotal.getText()); 

        calstat.executeUpdate(); 
+0

爲什麼你沒有給出正確答案的要點? – YumYumYum 2011-12-27 14:33:03

回答

0

你在你的存儲過程中有規定(Regno)的INOUT參數,所以你需要都要爲其輸入指定一個值並將其註冊爲CallableStatement.registerOutParameter方法。另外,請嘗試設置int輸入參數的值。

例如:

CallableStatement calstat=null;  
calstat=conn.prepareCall("{call studentrcs(?,?,?,?,?)}"); // **how i can pass the value here(at run time).** 
//System.out.println("Update"); 
    calstat.setString(1,tname.getText()); 
    calstat.setInt(2, Integer.parseInt(treg.getText())); 
    calstat.setInt(3, Integer.parseInt(tmark1.getText())); 
    calstat.setInt(4, Integer.parseInt(tmark2.getText())); 
    calstat.setInt(5, Integer.parseInt(ttotal.getText())); 

    calstat.registerOutParameter(5, Types.NUMERIC); 

    calstat.executeUpdate(); 

我假設所有這一切都是在try catch finally塊,所以我已經離開了處理將要提出的NumberFormatException如果tmark1.getText()tname.getText()tmark2.getText()ttotal.getText()回報無效整數值。大約從Java here

調用的MySQL程序順便說一句,我不知道爲什麼你不只是轉儲SQL更新方法到它自己的Java方法和調用,而不是創建一個存儲

更多信息MySQL例程。儘管我的意見!

相關問題