gpt4 book ai didi

java - resultSet.next() 抛出空指针异常

转载 作者:搜寻专家 更新时间:2023-10-30 21:51:33 24 4
gpt4 key购买 nike

我在 Java 中工作,使用 JDBC 对数据库执行查询。出于某种原因,这段代码:

public static void checkAllFlights() {
String SQLStatement = "SELECT Flight.FlightID,"
+"(CASE WHEN (SUM(NumSeats) > 0) THEN SUM(NumSeats) ELSE 0 END)"
+"AS Booked_Seats,"
+"(CASE WHEN (MaxCapacity-SUM(NumSeats) > 0) THEN MaxCapacity-SUM(NumSeats) ELSE MaxCapacity END) AS Available_Seats,"
+"MaxCapacity"
+"FROM Flight LEFT JOIN FlightBooking ON Flight.FlightID = FlightBooking.FlightID"
+"GROUP BY Flight.FlightID, Flight.MaxCapacity"
+"ORDER BY Flight.FlightID";

try {
dbAccess.getConnection();
ResultSet resultSet = dbAccess.runSimpleQuery(SQLStatement);
System.out.println("FlightID "+"Booked_Seats "+"Available_Seats "+"Max_Capacity");
while (resultSet.next()) {
int ID = resultSet.getInt(1);
System.out.println(ID);
}
DBAccess.disconnect();
} catch (Exception e) {
e.printStackTrace(System.err);
}
}

向我抛出错误:

java.lang.NullPointerException
at databases2.Databases2.checkAllFlights(Databases2.java:245)
at databases2.Databases2.main(Databases2.java:26)

(“245”行指的是“while (resultSet.next())”)

resultSet.next() 和 resultSet.close() 本身也会产生同样的错误。

我使用基本相同的代码进一步循环遍历结果集并且它工作正常并且我直接运行 SQL 并返回正确的结果所以我很困惑为什么 resultSet.next()可能会抛出空指针异常?

runSimpleQuery 方法:

public ResultSet runSimpleQuery(String sql)
throws Exception {

try {
// Create a statement variable to be used for the sql query
statement = connection.createStatement();

// Perform the update
return statement.executeQuery(sql);
} catch (SQLException e) {
// Problem encountered
statement = null;
return null;
}

更新:单步执行后,runSimpleQuery 确实返回了 null,这是它不应该做的事情,除非抛出 sql 异常....

更新:已解决。虽然查询是正确的,但显然我弄乱了我的字符串连接,因此它没有包含它应该包含的空格并且它在测试时有效,因为我是一个白痴并且通过从代码中复制粘贴而不是拉取实际变量来测试查询在调试器之外....

最佳答案

我遇到了同样的问题,我发现如果其他线程使用相同的连接,ResultSet 将在其他 sql 执行后抛出 NullPointerException。

sys.scheduler 06:28:00,017 [SchedulerReloader] ERROR - java.lang.NullPointerException
sys.scheduler 06:28:00,018 [SchedulerReloader] ERROR - com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:7009)

我的流程是一个长时间运行的流程,有 20 万行...我将为此使用一个特定的连接,并在流程完成后丢弃它。

关于java - resultSet.next() 抛出空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722335/

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