Как вызвать хранимую процедуру в JDBC
для домашней работы я должен создать хранимую процедуру pl/sql, чтобы добавить элемент facutly в базу данных
CREATE OR REPLACE PROCEDURE ADDFACULTYDEPTSAL
(facid IN NUMBER,
facname IN VARCHAR,
depID IN NUMBER)
AS
sal NUMBER;
BEGIN
CALCSALDEPT(depID, sal);
IF sal >= 50000
THEN
sal := sal*.9;
ELSE
IF sal >= 30000
THEN
sal := sal*.8;
END IF;
END IF;
INSERT INTO FACULTY(fid, fname, deptid, salary)
VALUES(facid, facname, depID, sal);
END ADDFACULTYDEPTSAL;
сделав это, мне нужно сделать вызов java для указанной процедуры, с которой я устал делать:
Statement stmt = dbConnection.createStatement();
String in;
if(a == 1){
in = "ADDFACULTYDEPTSAL("
+ fid.getText() + "','"
+ fname.getText() + "','"
+ did.getText() + "')";
} else {
in = "ADDFACULTYUNISAL("
+ fid.getText() + "','"
+ fname.getText() + "','"
+ did.getText() + "')";
}
stmt.executeQuery(in);
у меня есть выше в блоке try catch, который продолжает бросать ошибка. Я пробовал несколько вариантов строки " in " на основе того, что я видел на других сайтах: in = " {вызов ADDFACULTYDEPSAL ... in = " вызов ADDFACULTYDEPSAL ...
смотрим здесь: MySQL Connector Guide Я также попытался изменить stmt на вызываемый оператор как таковой:
CallableStatement stmt;
if(a == 1){
stmt = dbConnection.prepareCall("{call ADDFACULTYDEPTSAL(?,?,?)}");
} else {
stmt = dbConnection.prepareCall("{call ADDFACULTYUNISAL(?,?,?)}");
}
однако попытка таким образом, похоже, не работает, потому что мне нужно передать более двух переменных в процедуру.
может кто-нибудь сказать мне, что я делаю неправильно?
1 ответов
Вы были почти там:
String call = (a == 1 ? "{call ADDFACULTYDEPTSAL(?,?,?)}"
: "{call ADDFACULTYUNISAL(?,?,?)}");
try (CallableStatement stmt = dbConnection.prepareCall(call)) {
stmt.setInt(1, Integer.parseInt(fid.getText()));
stmt.setString(2, fname.getText());
stmt.setInt(3, Integer.parseInt(did.getText()));
stmt.execute();
}