как я могу передать значения параметров в хранимую процедуру MySql - PullRequest
0 голосов
/ 21 декабря 2011

Я создал хранимую процедуру 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();

1 Ответ

0 голосов
/ 21 декабря 2011

В вашей хранимой процедуре указан параметр INOUT (Regno), поэтому вам нужно как указать значение для его ввода, так и зарегистрировать его методом CallableStatement.registerOutParameter. Также попробуйте установить значения int для ваших 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() не вернутся допустимые целочисленные значения.

Подробнее о вызове подпрограмм MySQL из Java здесь

Кроме того, я не знаю, почему вы просто не просто записываете метод обновления SQL в его собственный метод Java и вызываете его, а не создаете хранимую подпрограмму MySQL. Только мое мнение, хотя!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...