Извлечение данных из разных таблиц в базе данных, отправка кода SQL для выполнения, возвращение данных?

Я делаю класс на Java для подключения и связи с базой данных, которую я создал в другом месте. Я хочу использовать метод executeQuery для оператора и получить ResultSet, откуда я буду получать информацию, полученную в ResultSet.

Моя проблема с командой SQL, как в; запрос, который я отправляю в базу данных. Кажется, что-то не так, и я получаю SQLException в тот самый момент, когда отправляю команду, то есть, должно быть, я сделал что-то не так. Может я что то не так пишу? Я не могу сказать, так как я просто попытался следовать примеру руководства, приведенному для этого курса, как можно лучше.

Вот запрос, который я пытаюсь отправить:

"SELECT fr.DepartureLocation, fr.Destination, d.Date, d.Time FROM `FlightRoute` fr,
`Departure` d WHERE d.FlightRouteId = fr.Id AND d.Date > " + dateFrom + " AND
d.Date < " + dateTo + " AND fr.Destination = `" + destination + "`;"

"DateFrom", "dateTo" и "destination" - все параметры для метода, который я вызываю, и я пытаюсь ограничить результаты, которые я получаю из этого оператора, теми, которые находятся в определенном диапазоне дат, а также имеют конкретный пункт назначения. Я мог бы добавить, что даты - это целые числа, например: 20131205. Это должно сделать так, чтобы более поздние даты были больше.

Является ли способ, которым я использую параметры с кодом SQL, каким-то образом неправильным, или я сделал в целом неисправный код SQL здесь?

Большое спасибо всем, кто мог бы предоставить правильный код SQL для меня, чтобы я мог видеть, что я сделал неправильно (так как мне нужно будет сделать еще несколько аналогично работающих операторов SQL)! Заранее спасибо!:)

РЕДАКТИРОВАТЬ: Вот запрашиваемый код, где я объявляю запрос и пытаюсь его выполнить:

try
{
    ArrayList<Departure> departures = new ArrayList<>();
    Statement stmt = con.createStatement();
    System.out.println("derp0");
    String query = "SELECT fr.DepartureLocation, fr.Destination, d.Date, d.Time FROM FlightRoute fr, Departure d WHERE d.FlightRouteId = fr.Id AND d.Date > " + dateFrom + " AND d.Date < " + dateTo + " AND fr.Destination = `" + destination + "`;";
    System.out.println("derp0.1");
    ResultSet rs = stmt.executeQuery(query);
    System.out.println("derp1");

В качестве краткого объяснения, источники должны проверить, где произошло исключение SQLException, и я могу только сказать, что исключение происходит сразу после "derp0.1".

1 ответ

Решение

Я предлагаю следующее изменение:

PreparedStatement ps = connection.prepareStatement(
  "SELECT fr.DepartureLocation, fr.Destination, d.Date, d.Time FROM `FlightRoute` fr,"+
  "`Departure` d WHERE d.FlightRouteId = fr.Id AND d.Date > ? AND d.Date < ? "+
  " AND fr.Destination = ?");

ps.setDate(1, dateFrom);
ps.setDate(2, dateTo);
ps.setString(3, destination); //assuming destination is a String 

ResultSet rs = ps.executeQuery();

В JDBC вы всегда должны использовать параметризацию, как указано выше. Это также может решить вашу проблему, которая может быть вызвана неправильным форматом даты.

1
Другие вопросы по тегам