Вопрос @Alex van den Hoogen очень похож, но использует функцию, а не процедуру, которая, кажется, немного смутила вас. Суть та же; вы не передаете достаточно параметров в вызове Java - вы устанавливаете и получаете тот же позиционный параметр, номер 1. Вам нужно сделать что-то вроде:
CallableStatement cs = conn.prepareCall("{call demo.run_demo(?,?)}");
cs.setString(1, "update demo.users set locale=''english'' where user_id = 2");
cs.registerOutParameter(2, Types.INTEGER);
cs.execute();
System.out.println("out="+cs.getInt(2));
Так что в prepareCall
, ?,?
вместо просто ?
; и 2
вместо 1
в registerOutParameter
и getInt
.
Или с обновленной процедурой из вашего более позднего вопроса , также получая сообщение об ошибке:
CallableStatement cs = conn.prepareCall("{call demo.run_demo(?,?,?)}");
cs.setString(1, "update demo.users set locale=''english'' where user_id = 2");
cs.registerOutParameter(2, Types.INTEGER);
cs.registerOutParameter(3, Types.VARCHAR);
cs.execute();
System.out.println("out="+cs.getInt(2) + ":" + cs.getString(3));