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

Dúvida no Ex. 1 da Aula 6 - Isolando o acesso aos dados e o DAO

Boa noite pessoal..

Tenho uma dúvida, o professor no video faz uma conexão utilizando try (Connection con = new ConnectionPool().getConnection()...

Porém eu ja quebrei a cabeça e não consigo inserir da mesma forma que ele... vocês poderiam me ajudar?

segue a classe Database.

package br.com.anderson.jdbc;

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

import javax.sql.DataSource;

import org.hsqldb.jdbc.JDBCPool;

public class Database {

    private DataSource dataSource;

    Database() {
        JDBCPool pool = new JDBCPool();
        pool.setUrl("jdbc:hsqldb:hsql://localhost/loja-virtual");
        pool.setUser("SA");
        pool.setPassword("");
        this.dataSource = pool;
    }

    Connection getConnection() throws SQLException {
        // Connection connection =
        // DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/loja-virtual",
        // "SA", "");
        Connection connection = dataSource.getConnection();
        return connection;
    }
}

e a classe TestaInsercaoDeProduto;

package br.com.anderson.jdbc;

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

import br.com.anderson.jdbc.modelo.Produto;

public class TestaInsercaoDeProduto {
    public static void main(String[] args) throws SQLException {
        Produto mesa = new Produto("Mesa Azul", "Mesa com 4 pés");
        try (Connection con = new ConnectionPool().getConnection()){

        }
    }
}

no quick fix ele não me da alternativas pra resolver esse problema...

Obrigado!

4 respostas

Anderson, Bom dia !

é necessário a continuação do seu código , mas o que pode estar errado que todo try é necessário de um catch . no seu código não possui um catch para o try .

segue meu código no exercicio proposto :

public class TestaInsercao {

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


        String sql = "INSERT INTO Produto(nome, descricao) VALUES (? , ?) ";

        try (Connection connection = new ConnectionPool().getConnection()) {

            connection.setAutoCommit(false);

            try (PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {

                adiciona("TV LCD", " Televisão LCD 32 polegadas", statement);
                adiciona("Blueray", "Full HDMI", statement);
                connection.commit();

            }catch(Exception ex){

                ex.printStackTrace();
                System.out.println("Rollback efetuado");
                connection.rollback();

            }
        }
    }

    private static void adiciona(String nome, String descricao, PreparedStatement statement) throws SQLException {

        if (nome.equals("Blueray")) {
            throw new IllegalArgumentException("Problema Ocorrido");
        }
        statement.setString(1, nome);
        statement.setString(2, descricao);

        statement.execute();
        try (ResultSet resultSet = statement.getGeneratedKeys()) {

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

        }
    }

}

Espero ter ajudado , Bons estudos

Bom dia Celso, eu entendi... mas acontece que o ConnectionPool().getConnection()) não é reconhecido pelo Eclipse... eu não sei o pq... será que ao invés de eu colocar ConnectionPool().getConnection() eu devo colocar Connection connection = dataSource.getConnection();?

Olá Anderson! Onde você está chamando o método getConnection()? perceba que você não colocou ele como public, logo o modificador de acesso dele é default:

Connection getConnection() throws SQLException {

Quando o modificador de acesse de um método ou atributo é default ele só pode ser utilizado por outras classes que estejam no mesmo pacote da classe onde o método ou a variável é declarado. Caso você esteja chamando o método de outro pacote ele não é reconhecido por isso, é necessário colocar o modificador de acesso public.

Espero ter ajudado! Bons Estudos

solução!

Valeu Pessoal, mas o que aconteceu foi que eu não me esqueci de ler a explicação da aula... Nela, o Professor pede para que renomeemos a classe Database para ConnectionPool... agora eu consegui... Muito Obrigado e desculpe, foi um erro meu.