Nabeel Munir Ответов: 2

Как выполнить поиск из базы данных по имени и фамилии в 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

Эй, да, я понял, УР намек сработал. и то же самое сказала Мадмич. Теперь это работает, Спасибо.

2 Ответов

Рейтинг:
5

MadMyche

Кроме того, строка должна быть заключена в кавычки, как указал OG; похоже, что вы добавляете, а затем переопределяете первый параметр

PreparedStatement statement = conn.prepareStatement(query);
statement.setString(1, String.valueOf(firstName));//       setString(1   OK
statement.setString(1, String.valueOf(lastName)); //       setString(1...again
ResultSet resultSet = statement.executeQuery();

Я думаю, что это должно быть больше похоже на это:
PreparedStatement statement = conn.prepareStatement(query);
statement.setString(1, String.valueOf(firstName));..       setString(1    
statement.setString(2, String.valueOf(lastName)); //       setString(2
ResultSet resultSet = statement.executeQuery();


Рейтинг:
14

OriginalGriff

Вам нужны кавычки вокруг строки SQL LIKE, иначе она не будет распознана:

String query = "SELECT * FROM database_activity.Teacher WHERE firstname like '%' + ? + '%' and lastname like '%' + ? + '%'";