Извлечение данных из разных таблиц в базе данных, отправка кода 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 вы всегда должны использовать параметризацию, как указано выше. Это также может решить вашу проблему, которая может быть вызвана неправильным форматом даты.