Erro em Select

7 respostas
C
Tenho um método que recebe como parametro um codigo, fazendo a comparaçao desse codigo com o codigo cadastrado no banco ele deveria trazer todos os outros campos, mas ele me ta dando um erro de SQL e acaba nao trazendo os meus campos o codigo eh o segunte
//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;
        }
    }
ele cai direto no catch. eu executei esse meu sql no MYSql e funcinou perfeitamente mas no java to com esses problemas desde já agradeço

7 Respostas

rafaeldiego

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.

g4j

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.

Jarf

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

C

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

g4j

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);
C

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
g4j

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,

Criado 24 de setembro de 2008
Ultima resposta 26 de set. de 2008
Respostas 7
Participantes 4