//metodo que retorna o cliente selecionado atraves do codigo e joga para os campos
public Clientes getCliente(Integer codigo) {
try {
// Comando sql para a busca
String sqlBusca = "select ID_PESSOA,NOME,SOBRENOME,SENHA,ENDERECO,CPF,RG,CIDADE,ESTADO,DATA_NASC from pessoa where ID_PESSOA = ?";
String sqlBuscaUsr = "select TIPO_USR from tipo_usuario where ID_TIPO_USUARIO = ?";
// Verifica se o comando esta certo e prepara para a execução
PreparedStatement busca = Conecta.getInstance().prepareStatement(sqlBusca);
PreparedStatement buscaUsr = Conecta.getInstance().prepareStatement(sqlBuscaUsr);
// Atribui o valor do código para o ?
busca.setInt(1, codigo);
buscaUsr.setInt(1,codigo);
// Executa comando de busca e armazena todo o resultado dentro do
// ResultSet rs
ResultSet rs = busca.executeQuery();
ResultSet rsUsr = buscaUsr.executeQuery();
// Cria um novo cliente para guardar os dados
Clientes clientes = new Clientes();
// Laço percorrendo o resultado que esta no rs(ResultSet)
while (rs.next()) {
// Armazenando os valores que estão no banco em uma variável do
clientes.setCodigo(rs.getInt("ID_PESSOA"));
clientes.setNome(rs.getString("NOME"));
clientes.setSobrenome(rs.getString("SOBRENOME"));
clientes.setSenha(rs.getString("SENHA"));
clientes.setEndereco(rs.getString("ENDERECO"));
clientes.setCpf(rs.getString("CPF"));
clientes.setRg(rs.getString("RG"));
clientes.setCidade(rs.getString("CIDADE"));
clientes.setEstado(rs.getString("ESTADO"));
clientes.setDatadenascimento(rs.getString("DATA_NASC"));
clientes.setTipo_usuario(rsUsr.getString("TIPO_USR"));
}
return clientes;
} catch (SQLException e) {
System.out.println("Não foi possível localizar o cliente ");
return null;
}
}
Erro em Select
7 Respostas
olá…
1º) sua tabela pessoa tem algum relacionamento com a tipo_usuário? você pode usar somente uma query para trazer os resultados que voce precisa.
2º) poste o erro que aparece, talvez o erro sejá até intuitivo! poste aí que fica mais fácil ajudar.
Sem o stacktrace do erro fica difícil.
Notei que vc está usando 2 queries, e neste ResultSet:
ResultSet rsUsr = buscaUsr.executeQuery();
Não vi nenhum rsUsr.next() aí! Vc deum um next() somente no primeiro ResultSet.
Provavelmente vc tem o relacionamento de tipo_usuario com pessoa né? Então é melhor vc fazer um join das duas tabelas e trazer tudo no mesmo sql.
Amigo, altere seu codigo no final para seguinte forma:
catch (SQLException e) {
e.printStackTrace();
System.out.println("Não foi possível localizar o cliente ");
return null;
}
Dessa forma será exibido detalhadamente o erro e ficará mais facil para te ajudar.
[]'s
Seguinte refiz meu codigo SQL
// Comando sql para a busca
String sqlBusca = "select P.ID_PESSOA,P.NOME,P.SOBRENOME,P.SENHA,P.ENDERECO,P.CPF,P.RG,P.CIDADE,P.ESTADO,P.DATA_NASC,T.TIPO_USR from pessoa P,tipo_usuario T where ID_PESSOA = ? and ID_TIPO_USUARIO = ?";
// Verifica se o comando esta certo e prepara para a execução
PreparedStatement busca = Conecta.getInstance().prepareStatement(sqlBusca);
// Atribui o valor do código para o ?
busca.setInt(1, codigo);
// Executa comando de busca e armazena todo o resultado dentro do
ResultSet rs = busca.executeQuery();
e o erro que surge quando eu executo esse metodo é o seguinte
java.sql.SQLException: No value specified for parameter 2
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:1674)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:1622)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1332)
Obrigado a quem tá me ajudando
Vc tem 2 parametros no teu sql cara. Faltou vc dar o setInt no campo tipo_produto:
where ID_PESSOA = ? and ID_TIPO_USUARIO = ?";
busca.setInt(1, codigo);
//falta algo como a linha abaixo
busca.setInt(2, codigoTipoUsuario);
Amigo fiz o que vc disse
defini inicialmente
// Atribui o valor do código para o ?
busca.setInt(1, codigo);
busca.setInt(2,codigo);
usando o mesmo parametro para os 2
depois usei 2 parametros diferentes
// Atribui o valor do código para o ?
busca.setInt(1, codigo);
busca.setInt(2,codigoUsr);
e de qualquer um dos 2 modos ele me gerou outro erro que é o seguinte
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:2715)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:2746)
at com.mysql.jdbc.PreparedStatement.setInt(PreparedStatement.java:2697)
cara nao to vendo o erro olho varias vezes e pra mim ta certo o codigo SQL joguei no MySql e funciono beleza
mass aqui sem chance
Estranho cara…
teu sql está assim:
"select P.ID_PESSOA,P.NOME,P.SOBRENOME,P.SENHA,P.ENDERECO,P.CPF,P.RG,P.CIDADE,P.ESTADO,P.DATA_NASC,T.TIPO_USR from pessoa P,tipo_usuario T where ID_PESSOA = ? and ID_TIPO_USUARIO = ?";
da pra dar uma melhoradinha, fazendo o join entre as duas tabelas e usando o alias P. e T. nas colunas de restrição que recebem os parametros:
"select P.ID_PESSOA,P.NOME,P.SOBRENOME,P.SENHA,P.ENDERECO,P.CPF,P.RG,P.CIDADE,P.ESTADO,P.DATA_NASC,T.TIPO_USR from pessoa P,tipo_usuario T where P.ID_TIPO_USUARIO = T.ID_TIPO_USUARIO and P.ID_PESSOA = ? and T.ID_TIPO_USUARIO = ?";
Tente aí e nos retorne,