Pour les devoirs, je dois créer une procédure stockée pl/sql pour ajouter un membre à une base de données
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;
Cela fait, je dois faire un appel à Java pour ladite procédure, ce que je suis fatigué de faire avec:
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);
J'ai ce qui précède dans un bloc try catch qui continue de générer une erreur. J'ai essayé plusieurs variantes de la chaîne "in" en fonction de ce que j'ai vu sur d'autres sites: in = "{call ADDFACULTYDEPSAL ... in =" call ADDFACULTYDEPSAL ...
en regardant ici: MySQL Connector Guide J'ai également essayé de changer stmt en une instruction appelable en tant que telle:
CallableStatement stmt;
if(a == 1){
stmt = dbConnection.prepareCall("{call ADDFACULTYDEPTSAL(?,?,?)}");
} else {
stmt = dbConnection.prepareCall("{call ADDFACULTYUNISAL(?,?,?)}");
}
Cependant, essayer de cette façon ne semble pas fonctionner car j'ai besoin de passer plus de deux variables dans la procédure.
Quelqu'un peut-il me dire ce que je fais mal?
Vous y étiez presque:
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();
}