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

NullPointerException ao usar close no ResultSet

Oba Galera to tentando gravar os dados no banco porém se eu fecho o ResultSet no metodo ele me retorna uma Exception.

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "org.mariadb.jdbc.client.socket.PacketReader.readPacket(boolean, boolean)" because "this.reader" is null
    at org.mariadb.jdbc.client.result.Result.skipRemaining(Result.java:146)
    at org.mariadb.jdbc.client.result.Result.close(Result.java:208)
    at br.com.viagem.certa.InserindoDadosComParametro.extracted(InserindoDadosComParametro.java:62)
    at br.com.viagem.certa.InserindoDadosComParametro.main(InserindoDadosComParametro.java:26)

Porem se eu não fecho a conexão ele funciona normalmente e cria os dados no banco.

public class InserindoDadosComParametro {

    public static void main(String[] args) throws SQLException {

        ConnectionFactory conexao = new ConnectionFactory();
        try(Connection connection = conexao.recuperarConexao()){

            connection.setAutoCommit(false);

            try(PreparedStatement stm = connection.prepareStatement("INSERT INTO nacionais(cidade, descricao, valor) values (?,?,?)", Statement.RETURN_GENERATED_KEYS)) {
                //(1)--------------------------------------------------------------------------------------//
                String cidade = "Camaçari";
                String descricao = "Arembepe, no litoral de Camaçari, possui piscinas naturais de águas mornas e tranquilas. E faixas de areia são protegidas pelo Projeto Tamar, para preservação das tartarugas marinhas.";
                double valor = 2500.00;

                extracted(cidade, descricao, valor, stm);
                //(2)--------------------------------------------------------------------------------------//
                cidade = "Holambra";
                descricao = "Holambra é muito conhecida por sua diversidade de flores e da forte influência da colonização holandesa na arquitetura e gastronomia local.";
                valor = 1000.00;

                extracted(cidade, descricao, valor, stm);

                connection.commit();
            } catch (SQLException e) {
                e.printStackTrace();
                System.out.println("Roll Back Executado");
                connection.rollback();
            }
        }


    }

    private static void extracted(String cidade, String descricao, double valor, PreparedStatement stm)
            throws SQLException {
        stm.setString(1, cidade);
        stm.setString(2, descricao);
        stm.setDouble(3, valor);
//         if(cidade.equals("Holambra")) {
//             throw new RuntimeException("Não foi possivel adicionar");
//         }
        stm.execute();

        ResultSet rst = stm.getGeneratedKeys();
            while(rst.next()) {
                Integer id = rst.getInt(1);
                System.out.println("O Id Criado foi " + id);

            }
            rst.close();



    }

}

Segue o codigo para avaliação vou seguir o curso usando matendo a conexão aberta até ter uma solução, obrigado.

3 respostas

Fernando, bom dia. Acho que não entendi sua dúvida ... No código acima, você está fechando o resultSet

ResultSet rst = stm.getGeneratedKeys();
            while(rst.next()) {
                Integer id = rst.getInt(1);
                System.out.println("O Id Criado foi " + id);

            }
            rst.close();

Dessa forma acima é que não funciona?

Oie então agora quando usei a o pool de conexão ele funciono normal, vai entender.

solução!

Opa, que bom, Fernando!! Então o problema foi solucionado né?

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