Bom galera, eu fiz um sistema onde eu tinha um tipo de busca milagrosa heheh Por exemplo: vc escrvia "João" e o sistema buscava na tabela de Contatos, por "%Jo%o%" nos campos NOME, CONTATO,RAZAO SOCIAL, ENDERECO, e tralalalala.....
Agora estou refazendo o sistema e queria manter essa "busca", só que estou usando o patter DAO (sou (MUIIIITO)iniciante ) e queria saber se existe alguma maneira de fazer algo assim:
SELECT * FROM tbContatos WHERE * = parametro
para que fique mais "enxuto" e leve ja que a busca é refeita a cada tecla pressionada. Pois eu fiz testando praticamente campo a campo, o que torna MUITO dificil, cançativo, problematico (e na minha opnião um tipo de gambiarra).
Existe algum problema de eu usar um metodo assim ou pelo menos com essa assinatura que retorne esse array de string usando pattern DAO?
Segue minha criança =)
public static Contato[] buscarContato(String paramConteudo, boolean nome, boolean endereco, boolean documentos, boolean telefones, boolean cliente, boolean fornecedor, boolean funcionario, boolean vip, boolean excluido, int ordem) {
// Cria builder para a string de pesquisa ja para buscar todos.
StringBuilder strComandoSQL = new StringBuilder("SELECT * FROM tbContatos ");
boolean temWhere = false;
// Verifica se a string recebida não é nula.
if (paramConteudo != null) {
// Verifica se é para realização de busca através do ID.
if (paramConteudo.indexOf(VariaveisDeSistema.BUSCA_POR_ID) == 0) {
// Busca usuario especifico
strComandoSQL.append(" WHERE idContato = ");
temWhere = true;
// Adiciona o id do contato.
strComandoSQL.append(paramConteudo.substring(VariaveisDeSistema.BUSCA_POR_ID.length(), paramConteudo.length() - 1));
}// Fim da verificação de buscar por id.
else {// Busca pelo conjunto de filtros passados como parametro.
// Realiza a limpeza da string para ralizar a busca
String conteudoLimpo = Funcoes.limparString(paramConteudo, 1);
// Verifica se vai utilizar algum filtro
if (nome || endereco || documentos || telefones) {
// Verifica se o "conteudo" recebido para filtragem não é
// nulo.
if (paramConteudo != null && !paramConteudo.equals("")) {
if (!temWhere) {
// Adiciona o WHERE para as buscas
strComandoSQL.append(" WHERE ");
temWhere = true;
}
strComandoSQL.append(" ( ");
if (nome) { // filtra por nome
strComandoSQL.append("nomeCompleto LIKE '" + conteudoLimpo + "' OR");
}// Fim do nome
strComandoSQL.append(" obs LIKE '" + conteudoLimpo + "' OR ");
if (endereco) { // filtra por endereço
// Logradouro
strComandoSQL.append(" logradouro LIKE '" + conteudoLimpo + "' OR");
// Bairro
strComandoSQL.append(" bairro LIKE '" + conteudoLimpo + "' OR");
// Cidade
strComandoSQL.append(" cidade LIKE '" + conteudoLimpo + "' OR");
// UF
strComandoSQL.append(" uf LIKE '" + conteudoLimpo + "' OR");
// Cep
strComandoSQL.append(" cep LIKE '" + conteudoLimpo + "' OR");
// Localização
strComandoSQL.append(" localizacao LIKE '" + conteudoLimpo + "' OR");
// Complemento
strComandoSQL.append(" complemento LIKE '" + conteudoLimpo + "' OR");
}// Fim do endereço
if (documentos) {// filtra por documentos.
// CPF
strComandoSQL.append(" cpf LIKE '%" + conteudoLimpo + "' OR");
// RG
strComandoSQL.append(" rg LIKE '" + conteudoLimpo + "' OR");
// CNPJ
strComandoSQL.append(" cnpj LIKE '" + conteudoLimpo + "' OR");
// INSCRICAO
strComandoSQL.append(" inscricao LIKE '" + conteudoLimpo + "' OR");
// CTPS
strComandoSQL.append(" ctps LIKE '" + conteudoLimpo + "' OR");
// CTPS SERIE
strComandoSQL.append(" ctpsSerie LIKE '" + conteudoLimpo + "' OR");
}// Fim do documentos.
if (telefones) { // Filtra por telefones.
// Telefone 1
strComandoSQL.append(" telefone LIKE '%" + conteudoLimpo + "' OR");
// Telefone 2
strComandoSQL.append(" telefone2 LIKE '%" + conteudoLimpo + "' OR");
// Celular
strComandoSQL.append(" celular LIKE '%" + conteudoLimpo + "' OR");
// Fax
strComandoSQL.append(" fax LIKE '%" + conteudoLimpo + "'");
}// Fim do telefone
strComandoSQL.append(")");
}// Fim da Verificacao do conteudo
}// Fim dos filtros
// Filtros excluisivos acomulativos.
if (fornecedor || cliente || vip || funcionario) {
if (!temWhere) {
strComandoSQL.append(" WHERE ");
temWhere = true;
} else {
strComandoSQL.append(" AND ");
}
strComandoSQL.append(" ( ");
if (fornecedor) {
strComandoSQL.append(" fornecedor = 1 AND ");
}
if (cliente) {
strComandoSQL.append(" cliente = 1 AND ");
}
if (vip) {
strComandoSQL.append(" vip = 1 AND ");
}
if (funcionario) {
strComandoSQL.append(" funcionario = 1 ");
}
// Verifica se sobrou " AND " no final da string.
if (strComandoSQL.lastIndexOf("AND ") > strComandoSQL.length() - 5) {
strComandoSQL.delete(strComandoSQL.length() - 5, strComandoSQL.length() - 1);
}
strComandoSQL.append(") ");
}// Final dos filtros de tipos
}// Else busca por id
if (temWhere) {
strComandoSQL.append(excluido ? " AND excluido = 1" : " AND excluido = 0");
} else {
strComandoSQL.append(" WHERE ");
temWhere = true;
strComandoSQL.append(excluido ? " excluido = 1" : " excluido = 0");
}
// Ordena
strComandoSQL.append(Funcoes.getOrdenador(0, ordem));
try {
// // system.out.println(strComandoSQL.toString());
// Cria o statement
Statement stmBuscaSQL = (Statement) conConexaoComBanco.createStatement();
// Cira o resultSet que vai armazenar os registros
// encontrados.
ResultSet rsContatosEncontrados = stmBuscaSQL.executeQuery(strComandoSQL.toString());
// Envia o resultset para a classe Funcoes montar os
// Contatos e retornar um array de Contato.
return Funcoes.montarContato(rsContatosEncontrados);
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "ERRO DESCONHECIDO: " + e.getMessage(), VariaveisDeSistema.SISTEMA_NOME, JOptionPane.ERROR_MESSAGE);
}
}
return null;
}
