Eri*_*ric 10 java oracle plsql stored-procedures 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;
Run Code Online (Sandbox Code Playgroud)
完成后,我需要为所述程序进行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);
Run Code Online (Sandbox Code Playgroud)
我在上面的try catch块中继续抛出错误.我根据我在其他网站上看到的字符串在"in"中尝试了几个变体:in ="{call ADDFACULTYDEPSAL ... in ="call ADDFACULTYDEPSAL ...
看这里:MySQL连接器指南 我也尝试将stmt更改为可调用语句:
CallableStatement stmt;
if(a == 1){
stmt = dbConnection.prepareCall("{call ADDFACULTYDEPTSAL(?,?,?)}");
} else {
stmt = dbConnection.prepareCall("{call ADDFACULTYUNISAL(?,?,?)}");
}
Run Code Online (Sandbox Code Playgroud)
但是,尝试这种方式似乎不起作用,因为我需要将两个以上的变量传递给过程.
谁能告诉我我做错了什么?
And*_*eas 18
你几乎在那里:
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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29579 次 |
| 最近记录: |