Как выполнить поиск из базы данных по имени и фамилии в java
Привет,
Я пытаюсь искать учителей из базы данных, используя имя и фамилию в java,
Я пытаюсь передать параметры (String firstname, String lastname) в метод setString. Я должен получить результат, используя имя и фамилию.
Но, похоже,это не работает, я должен пройти модульный тест, и когда я запускаю модульный тест, модульный тест говорит мне, что "нет значения, указанного для параметра 2".
А как это можно сделать по-другому? как я, кажется, не могу его найти.
Я сделал то же самое, когда искал по id, и это сработало.
вот метод, который я использовал, когда искал по идентификатору
public Teacher findTeacher(int id) throws SQLException { Teacher teacher = new Teacher(0, null, null); String selectSQL = "SELECT * FROM database_activity.Teacher WHERE id = ?"; PreparedStatement statement = conn.prepareStatement(selectSQL); statement.setString(1, String.valueOf(id)); ResultSet resultSet = statement.executeQuery(); try { while(resultSet.next()) teacher = new Teacher(Integer.parseInt(resultSet.getString("id")), resultSet.getString("firstname"), resultSet.getString("lastname")); } catch (SQLException e) { } return teacher; }
У меня есть класс учителя с конструктором, геттерами и сеттерами.
public class Teacher { private int id; private String firstName; private String lastName; public Teacher(int id, String firstName, String lastName) { super(); this.id = id; this.firstName = firstName; this.lastName = lastName; } public int getID() { return id; } public void setId(int id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } @Override public String toString() { return "id: " + id +"Name: " + firstName + "Surname: " + lastName; }
Что я уже пробовал:
public List<Teacher> findTeacher(String firstName, String lastName) throws SQLException { List<Teacher> list = new ArrayList<>(); Teacher teacher = new Teacher(0, null, null); String query = "SELECT * FROM database_activity.Teacher WHERE firstname like %?% and lastname like %?%"; PreparedStatement statement = conn.prepareStatement(query); statement.setString(1, String.valueOf(firstName)); statement.setString(1, String.valueOf(lastName)); ResultSet resultSet = statement.executeQuery(); try { while(resultSet.next()) teacher = new Teacher(Integer.parseInt(resultSet.getString("id")),resultSet.getString("firstname") , resultSet.getString("lastname")); list.add(teacher); } catch (SQLException e) {} return list; }
Richard MacCutchan
"Но, похоже, это не работает,"
Мы не можем догадаться, что это значит. Пожалуйста, объясните, что именно не работает, какие результаты вы видите и где они происходят.
Кроме того, написание блоков catch, которые игнорируют исключение, - отличный способ убедиться, что ваш код "не работает".
Nabeel Munir
Привет @Richard. На самом деле я должен пройти модульный тест, и когда я выполняю и запускаю модульный тест, он говорит мне, что "нет значения, указанного для параметра 2".
Richard MacCutchan
Что и где это происходит? Пожалуйста, не думайте, что мы можем читать ваши мысли.
Nabeel Munir
Прошу прощения за причиненные неудобства.
заявление.метод setString(1, строки.метод valueOf(имя));
заявление.метод setString(1, строки.метод valueOf(фамилия));
Вышеприведенные два утверждения, по-видимому, не работают.
Richard MacCutchan
Нет, конечно же, нет. Вы устанавливаете оба значения в качестве параметра номер 1. Пожалуйста, потратьте больше времени на проверку вашего кода, если он не работает.
Nabeel Munir
Эй, да, я понял, УР намек сработал. и то же самое сказала Мадмич. Теперь это работает, Спасибо.