Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Método getString(string) do ResultSet não funciona.

O método não funciona se eu passar uma String, tem 2 tipos de método, um passando um Int, que seria a posição da coluna (Primeira, segunda, terceira, etc), e um passando o nome da coluna, neste caso, o "id". Porém, ele não encontra essa coluna no Banco e me devolve uma SQLexception "Column id not found", chequei no banco diversas vezes o nome da coluna, e no código java também, os 2 nomes batem, não entendi o porque do erro. Agora, se eu passar o método pela posição da coluna, que neste caso é um Int = 1, ai ele funciona. Reparem.

Statement stmt = connection.createStatement();
        boolean resultado = stmt
                .execute(
                        "insert into produtos(nome, descricao) values('notebook', 'notebook I5');",
                        stmt.RETURN_GENERATED_KEYS);

        System.out.println(resultado);
        ResultSet resultSet = stmt.getGeneratedKeys();

        while(resultSet.next()){
            String id = resultSet.getString(1);
            System.out.println("Id gerado: "+id);        
        }

O que vocês acham que pode ser?

6 respostas

tem 2 tipos de método, um passando um Int, que seria a posição da coluna (Primeira, segunda, terceira, etc), e um passando o nome da coluna, neste caso, o "id"

Tarcio , não sei se você está deduzindo isso, ou se viu em algum lugar, mas está errado, não é assim que funciona. Os tipos dos métodos se referem aos tipos da coluna, e não são apenas dois(Sting e int), pode ser getString(), getInt(), getDouble()... no seu caso pra pegar o valor da coluna id, supondo que seja um inteiro, seria getInt("id");. Apenas se sua coluna id fosse do tipo String você poderia fazer getString("id");

Não não, o getInt() Tbm não funciona. E a coluna é Int, não Long, não String.

Criando a tabela.

create table if not exists produtos( id int not null auto_increment primary key, nome varchar(255), descricao varchar(255) );

Resultado de um select All. (select * from ...) 1 Geladeira Geladeira duas Portas 2 Ferro de Passar Ferro de passar com vaporizador 3 notebook notebook I5

E faça o teste, existem 2 métodos getString(), ambos do ResultSet, mas um, passamos um parâmetro String, e o outro, passamos um Parâmetro Int. Apenas o Int está funcionando, mesmo quando atribuido à uma variável String ele funciona, já o método com parâmetro string (resultSet.getString(string), este não funciona.

Este código, resulta em uma coluna não encontrada:

while (resultSet.next()) {
                String id = resultSet.getString("id");
                System.out.println("Id gerado: " + id);
            }

Este código, funciona normalmente:

while (resultSet.next()) {
                String id = resultSet.getString(1);
                System.out.println("Id gerado: " + id);
            }
solução!

Olá Tárcio

Vamos por partes. Os métodos no formato getXXXX("string") recuperam o valor retornado do banco naquela coluna. Já os métodos no formato getXXXX(int) retornam o valor da coluna naquela posição, não importando o nome dela.

Quando você faz um insert, com o stmt.RETURN_GENERATED_KEYS setado, o que o banco devolve é o valor do id gerado, em uma coluna sem nome. Por isso você não consegue buscar usando o getXXX(string), já que a coluna não tem nome. precisa sempre usar o getXXX(int) para pegar a coluna.

Se ainda estiver com dúvidas é só avisar.

Abraços

Agora entendi, vlw!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software