【发布时间】:2023-04-03 07:15:02
【问题描述】:
我正在尝试通过 JDBC 从调用数据库中获取存储过程数据。执行以下代码时,我得到了 resultset=null,我的代码有什么错误?请指导我。
存储过程
CREATE PROCEDURE getEmpDetails
AS
BEGIN
SELECT * FROM Employees;
END
java 文件
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
static final String DB_URL = "jdbc:sqlserver://localhost;database=JDBCDatabase";
// Database credentials
static final String USER = "hj";
static final String PASS = "kalpana";
public static void main(String[] args) {
Connection con = null;
ResultSet rs = null;
CallableStatement stmt = null;
try{
//STEP 2: Register JDBC driver
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//STEP 3: Open a connection
System.out.println("Connecting to database...");
con = DriverManager.getConnection(DB_URL,USER,PASS);
//STEP 4: Execute a query
System.out.println("Creating statement...");
// stmt = conn.createStatement();
stmt = con.prepareCall("{call getEmpDetails}");
ResultSet resultSet = stmt.getResultSet();
System.out.println("resultset"+resultSet);
if (resultSet.next()) {
// Then we use a loop to retrieve rows and column data
// and creates a html coded table output
System.out.println("<table border='1' >");
do {
System.out.println("<tr>");
System.out.print("<td>" + resultSet.getString("id") + "</td>");
System.out.print("<td>" + resultSet.getString("first") + "</td>");
System.out.println("<td>" + resultSet.getInt("last") + "</td>");
System.out.println("<td>" + resultSet.getDouble("age") + "</td>");
System.out.println("</tr>");
} while (resultSet.next());
System.out.println("</table>");
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
stmt.close();
con.close();
// input.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
【问题讨论】:
-
异常发生在哪一行?
-
@SeahawksRdaBest ResultSet resultSet = stmt.getResultSet();
-
您从未执行过该语句。您调用的方法名为“prepare”是有原因的。您仍然需要为输入参数(如果有)和定义的输出参数(如果有)提供值,然后执行语句,在您的情况下使用
executeQuery()。见tutorials.jenkov.com/jdbc/callablestatement.html -
投票重新打开:链接的 NPE 问题与此问题无关,因为 NPE 发生在 JDBC 驱动程序内部,是由于设置不完整引起的,而不是因为 OP 使用的是空值。 NPE 应该是
IllegalStateException。 -
请提供完整的堆栈跟踪
标签: java sql-server stored-procedures jdbc