【问题标题】:How to call a stored procedure in JDBC如何在 JDBC 中调用存储过程
【发布时间】:2016-01-08 18:15:36
【问题描述】:

对于家庭作业,我必须创建一个 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(?,?,?)}");
}

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

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

【问题讨论】:

    标签: java oracle stored-procedures jdbc plsql


    【解决方案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();
    }
    

    【讨论】:

    • @Andreas,很好的解释。但是,您能建议我如何使用 java 存储和获取存储过程的结果吗?
    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 2014-06-30
    • 2014-11-24
    • 2016-05-03
    • 2012-01-05
    • 1970-01-01
    • 2015-04-20
    • 2018-09-13
    相关资源
    最近更新 更多