gpt4 book ai didi

java - JDBC中如何调用存储过程

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:44 24 4
gpt4 key购买 nike

对于家庭作业,我必须创建一个 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 block 中有上述内容。根据我在其他网站上看到的内容,我在字符串“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(?,?,?)}");
}

但是,尝试这种方式似乎不起作用,因为我需要将两个以上的变量传递到过程中。

谁能告诉我我做错了什么?

最佳答案

你快到了:

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();
}

关于java - JDBC中如何调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33061280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com