来自PL / SQL过程的Java类文件

我有一个下面的PL / SQL过程:

CREATE OR REPLACE PROCEDURE getDogInfo
(Dog_ID IN NUMBER, Dog_name OUT VARCHAR) AS
BEGIN
  SELECT Dog_name INTO Name
  FROM Dog_family
  WHERE ID = Dog_ID;
END;

我需要创建一个java类文件,它也是这样做的。 我一直在尝试像这样:

import java.sql.*;
import java.io.*;

public class Procedure {

  public static void getDogInfo (int Dog_ID, String Dog_name)
    throws SQLException
    { String sql =
      "SELECT Dog_name INTO Name FROM Dog_family WHERE ID = Dog_ID";
    try { Connection conn = DriverManager.getConnection("jdbc:default:connection:");
      PreparedStatement apstmt = conn.prepareStatement(sql);
      apstmt.setInt(1, Dog_ID);
      apstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
      ResultSet rset = apstmt.executeQuery();
      rset.close();
      apstmt.close(); //Connection close
      }
    catch (SQLException e) {System.err.println(e.getMessage());
    }
  }
}

我究竟做错了什么? 有人能帮助我做到这一点吗? 谢谢


已经在这个链接上展示了如何正确使用PreparedStatements。

你会发现参数应该是? 不是Dog_ID

尝试

SELECT Name FROM Dog_family WHERE ID = ?

它还会告诉你如何迭代你的resultSet


那么,你没有告诉我们问题是什么,但我立即看到了几个问题:

  • 你的select语句不应该有一个INTO子句。 这是一个PL / SQL构造。 您需要将查询结果作为结果集返回。

  • 您的输入参数Dog_ID将不会被使用,因为您没有在SQL语句中正确命名该参数。

  • Java字符串参数不能在方法中更新,我假设你正在尝试。 您可能需要从方法返回一个字符串值,或者使用StringBuilder引用或其他容器传入。请参阅此链接没有“out”参数要注册。 在这里阅读结果集
  • 所以,把你的SQL语句改成这样的东西(因为你使用的是位置参数而不是命名参数):

    "SELECT Dog_name FROM Dog_family WHERE ID = ?"
    

    你应该阅读JDBC(通常也是Java)。

    该查询应该是:

    SELECT Name 
    FROM Dog_family 
    WHERE ID = ?
    

    (假设Name是您从表中选择的列名称 - 不清楚NameDog_name是否是列名)。

    然后在执行查询并获得结果集后:

    String name = null;
    
    if (rset.next()) {
      name = rset.getInt (1);
    }
    ...
    return name;
    

    最后,你的函数应该返回一个String。 您无法将字符串作为参数传递并更新其值。 字符串在Java中是不可变的。

    还有一件事 - 行apstmt.registerOutParameter(2, java.sql.Types.VARCHAR); 不需要。 registerOutParameter仅用于CallableStatement ,它是用来执行存储过程的语句。

    链接地址: http://www.djcxy.com/p/20895.html

    上一篇: Java class file from PL/SQL procedure

    下一篇: SWIG, can I assign a value to a char** passed from Java to C