Porque essa variável inteira não armazena o valor do campo placa? ---- num = rs.getInt("placa")

1 resposta
G

Alguém poderia me ajudar com esse método? Criei um banco de dados com os seguintes campos: idvagas, bloco, n_vaga, placa e inseri dados em todos os campos.
O banco ficou mais ou menos assim:

int ------- varchar ------- int ----- varchar
idgavas ------ bloco ------ n_vaga ------ placa
1 ------------ A ----------- 1 ----------- NOT-2222
2 ----------- B ----------- 1 ----------- 0
3 ----------- A ----------- 2 ----------- 0
4 ----------- B ----------- 2 ----------- 0
5 ----------- A ----------- 3 ----------- 0
6 ----------- B ----------- 3 ----------- 0

Aí, criei uma classe de acesso ao banco que tá conectando direitinho, no entanto, precisei criar um método na classe para consultar a “idvagas” ( que equivale ao número de ordem da vaga ) mais próxima desocupada. Conforme podem ver acima, somente a idvaga 1 está ocupada com uma placa, logo a idvaga mais próxima desocupada seria a 2. Pois bem, compilei e não deu nenhum erro, porém não tenho o retorno 2, mas sim o retorno do contador, que inclusive só conta 1 vez e retorna o valor 1. Eu estou começando agora com java e estou tendo dificuldades de entender muitos erros; se alguém puder me ajudar.

public class AcessandoBD
{

static Connection con = ConexaoBD.getConnection();  // conexao
           
    public static String status="";
    static String q = "";
   
    static ResultSet rs;
public static int consulta(){

int cont = 0;

int num;
try{
             
             Statement st = (Statement) con.createStatement();
             
             // consulta a vaga mais proxima desocupada
             do{
                cont++;
                
                // recebe o valor consultado da placa
                q+="select bloco,n_vaga,placa from vagas where idvagas="+cont;
                
                rs = st.executeQuery(q); 
                
                num = rs.getInt("placa");   ----> o erro( ou melhor, o problema, pois erro de compilação não está dando) está aki, não consigo colocar o valor da placa dentro de num.
                
               }while(num!=0);
                        
            }catch(SQLException e){
                status = e.getMessage();
            } catch (Exception e) {
                status = e.getMessage();
            }
        return cont;
        
    }

}

1 Resposta

jamirdeajr

Olá,

Você não consegue colocar a "placa" em um inteiro porque ela é 'String', a conversão está disparando uma exceção que faz retornar o cont atual, que no exemplo é ainda é '1' porque tentou converter 'NOT-2222' para inteiro. Um jeito simples é comparar com a string "0":

public class AcessandoBD
{
    static Connection con = ConexaoBD.getConnection(); // conexao

    public static String status="";
    static String q = "";

    static ResultSet rs;

    public static int consulta()
    {
        int cont = 0;
        int num;
        String placa = "";

        try
        {
            Statement st = (Statement) con.createStatement();

            // consulta a vaga mais proxima desocupada
            do
            {
                cont++;
                // recebe o valor consultado da placa
                q+="select bloco,n_vaga,placa from vagas where idvagas="+cont;
                rs = st.executeQuery(q);
                //num = rs.getInt("placa"); ----> o erro( ou melhor, o problema, pois erro de compilação não está dando) está aki, não consigo colocar o valor da placa dentro de num.
                placa = rs.getString("placa");

            } while(!placa.trim().equals("0"));
        }
        catch(SQLException e)
        {
            status = e.getMessage();
            return -1;
        } 
        catch (Exception e) 
        {
            status = e.getMessage();
            return -1;
        }
        return cont;
    }
}

Sugiro também que você retorne um valor diferente (exemplo '-1') nos casos de exceção e trate na volta, mostrando o 'status' - o que causou a exceção.

Boa sorte!

Criado 1 de maio de 2012
Ultima resposta 1 de mai. de 2012
Respostas 1
Participantes 2