gpt4 book ai didi

java - 结果集空指针异常

转载 作者:行者123 更新时间:2023-12-01 23:49:32 24 4
gpt4 key购买 nike

我有一个存储过程,我想从 JDBC 调用它,我在该行中遇到了空指针异常”

while (restuls.next()) {

我的代码是:

Connection con = Database.getConnection();
CallableStatement callableStatement = null;
try {
String storedProcedure = "{call getAllCustomerAddresses(?,?,?,?,?,?,?)}";
callableStatement = con.prepareCall(storedProcedure);
callableStatement.setInt(1, this.getID());
callableStatement.registerOutParameter(2,
java.sql.Types.INTEGER);
callableStatement.registerOutParameter(3,
java.sql.Types.VARCHAR);
callableStatement.registerOutParameter(4,
java.sql.Types.INTEGER);
callableStatement.registerOutParameter(5,
java.sql.Types.INTEGER);
callableStatement.registerOutParameter(6,
java.sql.Types.INTEGER);
callableStatement.registerOutParameter(7,
java.sql.Types.VARCHAR);
callableStatement.execute();
System.out.println(callableStatement.getInt(2));
System.out.println(callableStatement.getString(3));
System.out.println(callableStatement.getInt(4));
System.out.println(callableStatement.getInt(5));
System.out.println(callableStatement.getInt(6));
System.out.println(callableStatement.getString(7));
ResultSet restuls = callableStatement.getResultSet();
while (restuls.next()) {
int addressID = restuls.getInt(2);
String label = restuls.getString(3);
int regionID = restuls.getInt(4);
int areaID = restuls.getInt(5);
int cityID = restuls.getInt(6);
String description = restuls.getString(7);
this.addresses.add(new CustomerAddressImpl(this, label,
description, RegionImpl.getInstance(regionID),
AreaImpl.getInstance(areaID), CityImpl
.getInstance(cityID), addressID));
}

看看代码,System.out.println正在工作,并且它正在从数据库打印正确的值,那么为什么结果集为空??

另一件事,我必须使用结果集,因为存储过程返回许多行。

我真的很困惑为什么我可以打印正确的值但结果集为空

提前致谢

编辑

如果你想给你存储过程请告诉我

存储过程

ALTER PROCEDURE [dbo].getAllCustomerAddresses(
@customerID INT,
@addressID INT OUTPUT,
@label VARCHAR(200) OUTPUT,
@regionID INT OUTPUT,
@areaID INT OUTPUT,
@cityID INT OUTPUT,
@description TEXT OUTPUT
)
AS
SET NOCOUNT Off;
SELECT @addressID = [ID],
@label = [label],
@regionID = [regionID],
@areaID = [areaID],
@cityID = [cityID],
@description = [description]
FROM Customer_Address
WHERE customerID = @customerID

最佳答案

如果结果集存在,则 PreparedStatement

execute() 方法返回 true,否则返回 false。您不检查execute()的返回值。我认为如果你这样做,你就会发现这是错误的。

原因应该是在您的存储过程中,恕我直言,没有返回值。因此,尝试分析它以了解问题。

以下是我可以给您的建议:

  1. 使用直接返回 ResaultSetexecuteQuery() 而不是 execute()。我觉得这样比较方便。
  2. 避免使用将平台无关的 Java 代码与特定类型的数据库相结合的存储过程。尝试用 java 编写所有逻辑并仅使用可移植的 SQL 语句。
  3. 我最后一次看到纯 JDBC 代码是大约 10 年前。有很多工具可以帮助您避免在 java 代码中编写 SQL。看看 JPA、Hibernate、iBatis 等。

关于java - 结果集空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16505812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com