PL/SQL过程中的Java类文件
我有一个以下PL/SQL过程:PL/SQL过程中的Java类文件,java,oracle,Java,Oracle,我有一个以下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.*; p
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());
}
}
}
我做错了什么?有人能帮我把它修好吗?谢谢您也应该阅读有关JDBC和Java的一般知识 查询应为:
SELECT Name
FROM Dog_family
WHERE ID = ?
假设Name是从表中选择的列名-不清楚Name或Dog_Name是列名
然后在执行查询并获得结果集后:
String name = null;
if (rset.next()) {
name = rset.getInt (1);
}
...
return name;
最后,函数应该返回一个字符串。不能将字符串作为参数传递并更新其值。字符串在Java中是不可变的
还有一件事——行apstmt.registerOutParameter2,java.sql.Types.VARCHAR;这是不需要的。registerOutParameter仅与CallableStatement一起使用,CallableStatement是用于执行存储过程的语句 让我们看看如何正确使用PreparedStatements
您会发现参数应该是?不是狗的身份证
试一试
它还将向您展示如何迭代您的结果集。好吧,您没有告诉我们问题是什么,但我马上就看到了几个问题: select语句不应包含INTO子句。这是一个PL/SQL构造。你需要 将查询结果作为结果集返回 您的输入参数Dog_ID将不会被使用,因为您没有 在SQL语句中正确命名参数 Java字符串参数不能在方法中更新,我 我假设这就是你正在尝试的。你要么需要 从方法返回字符串值,或使用StringBuilder 引用或其他要传递的容器。看见 没有要注册的out参数。仔细阅读结果集 因此,将SQL语句更改为如下内容,因为您使用的是位置参数而不是命名参数:
"SELECT Dog_name FROM Dog_family WHERE ID = ?"
"SELECT Dog_name FROM Dog_family WHERE ID = ?"