Java class file from PL/SQL procedure
I have a following PL/SQL procedure:
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;
I need to make a java class file that does the same. I've been trying like this:
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());
    }
  }
}
What am I doing wrong? Can someone help me get this working? Thanks
Have alook at this link showing you how to correctly use PreparedStatements.
 You will find that the parameter should be ?  not Dog_ID  
Try
SELECT Name FROM Dog_family WHERE ID = ?
It will also show you how to iterate through your resultSet
Well, you do not tell us what the problem is, but I see several issue right away:
Your select statement should not have an INTO clause. That is a PL/SQL construct. You need to return the result of the query back as a result set.
Your input parameter, Dog_ID will not be used, because you have not named the parameter correctly in the SQL statement.
So, change your SQL statement to something like this(since you are using a positional parameter as opposed to a named parameter):
"SELECT Dog_name FROM Dog_family WHERE ID = ?"
You should read about JDBC (and Java in general too).
The query should be :
SELECT Name 
FROM Dog_family 
WHERE ID = ?
 (assuming Name is the column name you are selecting from the table - it wasn't clear whether Name or Dog_name was the column name).  
Then after you execute the query and get a result set :
String name = null;
if (rset.next()) {
  name = rset.getInt (1);
}
...
return name;
Finally, your function should return a String. You can't pass the String as a parameter and update its value. String is immutable in Java.
 One more thing - the line apstmt.registerOutParameter(2, java.sql.Types.VARCHAR);  is not needed.  registerOutParameter is only used with CallableStatement , which is a statement you use to execute a stored procedure.  
上一篇: 使用数组数组作为指向Java中可扩展的类列表的指针
下一篇: 来自PL / SQL过程的Java类文件
