2
respostas

Não consigo inserir no banco.

Não consigo inserir no banco aparece só esta mensagem, já debuguei, mas não mostra nada o processo é encerrado na pilha de forma abrupta, já testei a conexão e está ok, já teste o testa listagem e funciona perfeitamente, só consigo inserir pelo driver manager do HQSQLDB:

Informe o Nome: 
Cezar
Informe a Descrição: 
Teste
Abrindo conexão com o banco de dados

Segue minha classe de inserção:

package br.com.crud.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

/**
 * <b>Classe criada para testar inserções no banco HQSQLDB</b>
 * 
 * @author <i>RCARAUJO - Renato Cézar Silva de Araújo.</i>
 * @category Testes
 * @since 04/02/2020 - 11:27hs
 * @version 1.0
 */

public class TestaInsercao {

    private static String nome;
    private static String descricao;
    private static String entrada;
    private static Scanner ler = new Scanner(System.in);

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

        System.out.println("Informe o Nome: ");
        setNome(getLer().nextLine());

        System.out.println("Informe a Descrição: ");
        setDescricao(getLer().nextLine());

        Connection connection = Database.getConnection();

        String sql = "insert into produto(nome, descricao) values (?, ?)";

        PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
        statement.setString(1, getNome());
        statement.setString(2, getDescricao());

        ResultSet generatedKeys = statement.getGeneratedKeys();
        while (generatedKeys.next()) {
            long id = generatedKeys.getLong("id");
            System.out.println("id gerado: " + id);
        }
        generatedKeys.close();
        statement.close();
        connection.close();
    }

    public static String getNome() {
        return nome;
    }

    public static void setNome(String nome) {
        TestaInsercao.nome = nome;
    }

    public static String getDescricao() {
        return descricao;
    }

    public static void setDescricao(String descricao) {
        TestaInsercao.descricao = descricao;
    }

    public static String getEntrada() {
        return entrada;
    }

    public static void setEntrada(String entrada) {
        TestaInsercao.entrada = entrada;
    }

    public static Scanner getLer() {
        return ler;
    }

    public static void setLer(Scanner ler) {
        TestaInsercao.ler = ler;
    }
}

Minha classe DataBase:

package br.com.crud.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Database {

    public static Connection getConnection() throws SQLException {
        System.out.println("Abrindo conexão com o banco de dados");
        Connection connection = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/loja-virtual", "SA", "");
        return connection;
    }    

}

Segue minha classe TestaListagem que funciona e consegue conectar ao banco:

package br.com.crud.jdbc;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestaListagem {

    public static void main(String[] args) throws SQLException {
        Connection connection = Database.getConnection();
        Statement statement = connection.createStatement();
        boolean resultado = statement.execute("select * from Produto");
        ResultSet resultSet = statement.getResultSet();

        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String nome = resultSet.getString("nome");
            String descricao = resultSet.getString("descricao");
            System.out.println("id= " + id + ", nome= " + nome + ", descricao= " + descricao);
        }

        resultSet.close();
        statement.close();
        connection.close();
    }


}
2 respostas

Oi Renato, tudo bem?

Tem alguma informação no seu banco de dados?

Aparentemente o seu

while (resultSet.next()) {

Não tem nenhum registro no resultSet

Coloca um log a mais no TestaListagem para vermos se é isso mesmo:

public class TestaListagem {

    public static void main(String[] args) throws SQLException {
        Connection connection = Database.getConnection();
        Statement statement = connection.createStatement();
        boolean resultado = statement.execute("select * from Produto");
        ResultSet resultSet = statement.getResultSet();

        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String nome = resultSet.getString("nome");
            String descricao = resultSet.getString("descricao");
            System.out.println("id=" + id + ", nome=" + nome + ", descricao=" + descricao);
        }

        System.out.println("finalizando testa listagem...");
        resultSet.close();
        statement.close();
        connection.close();
    }


}

Olá Otávio, segue o resultado do console abaixo:

Abrindo conexão com o banco de dados
id= 0, nome= Renato, descricao= teste
finalizando testa listagem...

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