BuSCAR Dados Simultâneos Direto do BD

8 respostas Resolvido
L

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

8 Respostas

TerraSkilll

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.

L

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

TerraSkilll

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.

pmlm

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

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

L

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 {

<a class="mention" href="/u/test">@Test</a>

//@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);
pmlm

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'");
L
Solucao aceita

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

L

Obrigado pela atenção

Criado 8 de novembro de 2021
Ultima resposta 11 de nov. de 2021
Respostas 8
Participantes 3