私は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例外がスローされない限り実行すべきではありません....
更新:解決しました。クエリは正しかったのですが、文字列の連結を台無しにして、必要な場所にスペースが含まれないようにし、実際の変数をプルするのではなく、コードからコピーして貼り付けることでクエリをテストしたため、テスト時に機能しました。デバッガの外....