Я работаю в 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" относится к "пока (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? - person Iswanto San   schedule 30.03.2013dbAccess.runSimpleQuery(SQLStatement);возвращаетnull.. - person Vishal K   schedule 30.03.2013SQLStatementв базе данных и посмотрите, выходит ли какой-либо результат... - person Vishal K   schedule 30.03.2013null- person Vishal K   schedule 30.03.2013null- person Vishal K   schedule 30.03.2013