Parâmetros para consulta ao banco de dados [resolvido]
14 respostas
C_Lucas
Bom dia. Estou criando um aplicativo e gostaria de saber se tem uma forma de colocar mais de um parâmetro na instrução where na hora de efetuar o query em uma consulta, por exemplo: tenho esse código que faz a consulta com o parâmetro do campo rgm no banco de dados
ResultSetretornocadastro=statementcadastro.executeQuery("SELECT * FROM cadastrotcc WHERE rgm="+t_rgm.getText());
Ou seja crio um objeto que me permite efetuar uma consulta SQL e o resultset me trás as informações depois em uma caixa de texto, só que queria ampliar a forma de consulta colocando mais alguns parâmetros>
Desde de ja agradeço-lhes
Valeu altitdb, esse site é muito bom. Só que eu preciso ampliar o “WHERE” da meu código:
ResultSetretornocadastro=statementcadastro.executeQuery("SELECT * FROM cadastrotcc WHERE rgm="+t_rgm.getText());
Neste caso ele só tem uma referencia que é o campo “rgm”, eu mando uma determinada string e o programa analisa se tem esse rgm no banco caso tiver entra o resultset. Gstaria de ampliar a forma de pesquisa e pelo que entendi só mudando o “WHERE”, no site
altitdb
Cara…
vc ker colocar varios parametros para serem procurados eh isto?
ResultSetretornocadastro=statementcadastro.executeQuery("SELECT * FROM cadastrotcc WHERE rgm="+t_rgm.getText()+" AND campo2 = "+tf2.getText()+" AND campo3 = "+tf3.getText());
Desse jeito que você quer fazer?? Assim ele pode procurar por mais campos!!
Desculpe se não fui claro, é que não entendi muito bem.
xD~~
C_Lucas
Bom eu fiz assim:
ResultSetretornocadastro=statementcadastro.executeQuery("SELECT * FROM cadastrotcc WHERE rgm="+t_rgm.getText()+" AND nome = "+t_nome.getText()+" AND Codigo = "+t_cod.getText()+"");retornocadastro.next();t_nome.setText(retornocadastro.getString("nome"));t_curso.setText(retornocadastro.getString("curso"));t_cod.setText(retornocadastro.getString("Codigo"));t_email.setText(retornocadastro.getString("email"));f_cep.setText(retornocadastro.getString("cep"));f_tel.setText(retornocadastro.getString("telefone"));f_matricula.setText(retornocadastro.getString("matricula"));f_saldo.setText(retornocadastro.getString("saldo"));t_endereco.setText(retornocadastro.getString("end"));t_numcasa.setText(retornocadastro.getString("numero_da_casa"));t_rgm.setEditable(false);statementcadastro.close();conexaocadastro.close();
E da erro. O código não apresenta erro de sintaxe mais não da certo.
altitdb
Agora sim entendi!!
Você pode fazer assim…
ResultSetretornocadastro=statementcadastro.executeQuery("SELECT * FROM cadastrotcc WHERE rgm LIKE '%"+t_rgm.getText()+"'% OR nome LIKE "+t_nome.getText()+" OR Codigo LIKE "+t_cod.getText()+"");
os % que eu coloquei se refere que pode conter um ou parte do que você procura, mais isso deve ser usado junto com o like…
você pode fazer LIKE ‘%A%’ : mostra todos os registros que tenham A em determinado campo!
assim tbm LIKE ‘%A’ : mostra todos os registros que tem A no final…
assim tbm LIKE ‘A%’ : mostra todos os registros que tem A no começoo…
da uma testada ae…
xD~~
C_Lucas
Bom dia altitdb, agradeço-lhe pela ajuda mas continua dando erro. Peço desculpas pela demora em responder.
ccefetpb
antes de setar os campos no seu objeto vc tem quer fazer um rs.next().
Fica mais o menos assim :
if ( rs.next() ) {
//seta os atributos da forma que vc fez
}
lucas_carvalho100
Amigo, não use o Statement, faça assim:
PreparedStatementstmTeste=conexao.prepareStatement("SELECT * FROM TABELA WHERE PARAMETRO = ?")stmTeste.setString(1,"AQUI VOCE COLOCA O VALOR DO PARAMETRO");ResultSetrsTeste=stmTeste.executeQuery();// Aqui efetua o loop na consultawhile(rsTeste.next()){}
Dessa forma vc evita sql injection, e seu código fica mais limpo e eficiente.
C_Lucas
Boa noite.
Bom Lucas_carvalho eu fiz dessa forma
PreparedStatementstatementcadastro=conexaocadastro.prepareStatement("SELECT *FROM cadastrotcc WHERE rgm = ?");statementcadastro.setString(1,"rgm");ResultSetretornocadastro=statementcadastro.executeQuery();while(retornocadastro.next()){t_nome.setText(retornocadastro.getString("nome"));t_curso.setText(retornocadastro.getString("curso"));t_cod.setText(retornocadastro.getString("Codigo"));t_email.setText(retornocadastro.getString("email"));f_cep.setText(retornocadastro.getString("cep"));f_tel.setText(retornocadastro.getString("telefone"));f_matricula.setText(retornocadastro.getString("matricula"));f_saldo.setText(retornocadastro.getString("saldo"));t_endereco.setText(retornocadastro.getString("end"));t_numcasa.setText(retornocadastro.getString("numero_da_casa"));t_rgm.setEditable(false);}statementcadastro.close();conexaocadastro.close();
E não consegui efetuar a pesquisa onde estou errando? Se fizer da forma coreta a a possibilidade de aumentar os parâmetros da Query? Agradeço muito pela ajuda e novamente peço deculpas pela demora em responder.
lucas_carvalho100
E ai Lucas blz?
Então sem o ver a msg de erro é complicado… Mas me diz uma coisa o valor do paramametro é rgm mesmo?
É possível sim colocar mais parametros na query, acho que não tem limite (ou eu nunca cheguei nele) para fazer com mais parametro você faz assim:
PreparedStatementstatementcadastro=conexaocadastro.prepareStatement("SELECT * FROM cadastrotcc WHERE rgm = ? and parametro2 = ? and parametro3 = ?");statementcadastro.setString(1,"rgm");statementcadastro.setString(2,"Valor");statementcadastro.setString(3,"Valor");
Entendeu ? Você vai aumentando conforme a sua necessidade.
Quando você responder posta o erro que esta dando.
C_Lucas
Bom dia.
statementcadastro.setString(2,"Valor");
Esse “valor” que vc me perguntou é o nome do campo do banco de dados certo? Pois é essa string que preciso que retorne.
E essa linha que digitei emcima tem ir dentro de um while? Por exemplo:
PreparedStatementstatementcadastro=conexaocadastro.prepareStatement("SELECT *FROM cadastrotcc WHERE rgm = ? and nome = ? and Codigo =? and email = ? and cep =? and telefone = ? and matricula =?");ResultSetretornocadastro=statementcadastro.executeQuery();// dentro do while estão as strings serão retornadas while(retornocadastro.next()){statementcadastro.setString(1,"rgm");statementcadastro.setString(2,"Codigo");
Obrigado
lucas_carvalho100
Bom dia o “valor” é o valor que vc quer passar para o sql, por exemplo imagine que você quer o cliente com o id = 2 e o tipo dele igual a pesssoa fisica ficaria assim:
PreparedStatementstatementcadastro=conexaocadastro.prepareStatement("SELECT ID, NOME FROM CLIENTE WHERE ID = ? AND TIPO = ?");statementcadastro.setInt(1,10);statementcadastro.setString(2,"F");ResultSetretornocadastro=statementcadastro.executeQuery(); while(retornocadastro.next()){
system.out.println("O id do cliente é "+retornocadastro.getString("ID")+" o nome do cliente é "+retornocadastro.getString("NOME"));
}
retornocadastro.close();statementcadastro.close();
Entendeu vc seta os parametro do sql fora do while, dentro do while vc pega o retorno do sql…
Qualquer duvida posta ai novamente…
S
swordf
Se a sua dúvida é quanto a sintaxe da instrução, o voce pode colcar AND depois do where para aumentar a quantidade de parametros avaliados pelo select.
C_Lucas
Agradeço a todos a ajuda e peço desculpas por não responder rapidamente.