BuSCAR Dados Simultâneos Direto do BD

Boa noite galera, procurei esse assunto no fórum mas não encontrei.
Estou desenvolvendo um site que consulta informações de veículos que passaram em um pedágio. Eu já tenho o acesso ao banco de dados e também já consigo efetuar a busca de um veículo por vez. Mas gostaria de digitar várias placas ao mesmo tempo(usando por exemplo um textArea) , as placas podem ser separadas por espaço ou vírgula, e quando clicar em buscar, trazer os dados de todos os veículos listados.

Alguém sabe o que posso estar utilizando para fazer esse tipo de busca?
Desde já obrigado

Você pode usar select com in, colocando as placas como parâmetros, separados por vírgula. Algo como:

select * from veiculos where placa in ('ABC1111', 'DEF3333', 'BDB8888')

O in pode ter um desempenho ruim se houverem muitos registros (milhares ou milhões) para pesquisar e o banco não estiver bem otimizado, então fique atento a isso e, se necessário, crie índices ou dê uma olhada em alternativas, como o exists no MySQL.

Abraço.

Bom dia @TerraSkilll quando jogo o “IN” só traz resultado quando digito apenas uma placa

Confira a sintaxe da sua consulta e das tabelas, pois o IN deve retornar tudo o que casa com os elementos informados. Veja se não estão sobrando espaços e quebras de linha quando você processa o conteúdo do textarea.

Veja um exemplo no SQLFiddle: http://sqlfiddle.com/#!9/c5d4df/1/0

Abraço.

Provavelmente em vez de
in ('ABC1111', 'DEF3333', 'BDB8888')

estás a fazer
in ('ABC1111, DEF3333, BDB8888')

Esse é o trecho do meu código

//---------LISTAR PLACAS------------//*/
public List getLista(String placas) {
try {
List pass = new ArrayList();
PreparedStatement stmt = this.connection.prepareStatement("SELECT * FROM "

  • “CONSULTAPLACA_TAP WHERE DATA BETWEEN ‘30/10/2021’ and ‘30/11/2021’ and PLACA IN(’”+placas+’")");

public class PassagemDaoTest {
@Test
//@Ignore
public void buscar() throws ClassNotFoundException, SQLException {
PassagemDao2 passDao = new PassagemDao2();
List passagens1 = passDao.getLista("'BEW6F48,‘ISM1032’");
for(Passagem pass : passagens1) {
System.out.println(pass);

Como garantes que quem preenche o formulario preenche direitinho com as '?
Deves pedir, no frontend, as placas separadas por virgulas e transformar em lista de Strings. Essa lista de Strings deve ser o parametro deste método e depois aqui percorres a lista e constrois o IN corretamente.

Como tens agora este teste não passa porque, deveria ser

List passagens1 = passDao.getLista("'BEW6F48','ISM1032'");

Oh galera, deu certo aqui. No IN eu estava colocando aspas duplas e aspas simples desse jeito IN("’+filter.getPlacs()+’"). Só buscava quando inseria apenas uma placa.

Agora está buscando corretamente, só preciso colocar as placas entre aspas simples, conforme explicado por vocês
“WHERE DATAOCORRENCIA BETWEEN ‘01/11/2021’ and ‘21/11/2021’ and PLACAOPERADOR IN(”+filter.getPlacs()+")

@TerraSkilll e @pmlm meus amigos, muito obrigado pelo apoio
Abraços

Obrigado pela atenção