【发布时间】:2013-03-21 06:45:16
【问题描述】:
我在 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 异常......
更新:已解决。虽然查询是正确的,但显然我弄乱了我的字符串连接,因此它不包含它应该包含的空格,并且它在测试时工作,因为我是一个白痴,并通过从代码中复制粘贴而不是拉取实际变量来测试查询退出调试器....
【问题讨论】:
-
可以发
runSimpleQuery方法吗? -
无论您输入什么代码,看起来
dbAccess.runSimpleQuery(SQLStatement);正在返回null.. -
在数据库中运行
SQLStatement查询,看看是否有任何结果... -
你检查过连接对象吗?它是否返回正确的连接?连接可能为空..它被捕获块捕获并返回
null -
你应该调试那个..通过在 catch 块中打印异常..这样你就可以知道这个
null的确切原因
标签: java sql database postgresql resultset