Conexão Postgres no Netbeans + Design Pattern DAO

Ae galera, to começando hoje a fazer as conexões com o banco de dados.

Seguinte, fiz minha classe para conectar e no NetBeans configurei os drivers e o local do Banco de Dados, mas no Eclipse eu não to sabendo fazer a mesma coisa. Procurei um monte de tópico, importei Driver, mas não consegui conectar o Eclipse no Banco de Dados.

Alguém tem alguma dica?

Obrigado.

Fazendo uma conexão com Banco de Dados PostgreSQL

vlw

Olá,

No Eclipse, você deve colocar o JAR com o driver do banco de dados no seu classpath. Para fazer isso, você pode clicar com o botão direito no projeto -> Properties -> Java Build Path. Daí é só adicionar lá que o JAR será carregado quando sua aplicação for executada.

Estou assumindo que você está usando JDBC diretamente.

Abraço!

É eu acho que com o eclipse eu não consegui, no caso eu não consegui conectar o ECLIPSE com o POSTGRES, então eu não consigo conectar a CLASSE ao BANCO. Com o ‘NerdBeans’ eu consegui.

Mas independente.

Vamos comecar então, vou até mudar o título do tópico pra agregar tudo em um tópico só.

Seguinte, to comecando a implementar DAO. No caso eu to criando um programinha pra eu criar uma documentação das minhas músicas.
Eu criei uma tabela com algumas colunas e eu quero apenas que o programa adicione novos artistas, delete artistas e tenha um Search também.

Então pelo o que eu entendi, eu crio uma classe DAO e extendo ela para classes DAOAdd, DAODel, DAOSearch?

E no caso eu crio uma classe DAO para padrão de conexão correto?

Vejam minha classe DAO e me digam se é isso por favor.

package br.musicorg.model.DAO;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DAO {

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

        Connection conn = null;

        try {
            Class.forName("org.postgresql.Driver");
            conn = DriverManager.getConnection("jdbc:postgresql://localhost/proc", "proc", "proc");
            //System.out.println("Conexão realizada com sucesso");

            Statement stmt = conn.createStatement();

        } catch (ClassNotFoundException ex) {
            Logger.getLogger(DAO.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            conn.close();
        }

    }
}

E no caso eu pego as outras classes que precisam acessar o DAO e EXTENDO ela correto?

Abraço.

Olá, M3g4d3th!
Beleza?

Bom, primeiro, procure entender do que se trata a camada DAO.
Ela se situa no pacote MODEL.
O pacote MODEL é o qual trata das regras de negócio de um projeto.
A classe DAO vai manipular os dados de uma classe POJO.
A classe POJO vai referenciar uma tabela no banco de dados.

Vamos fazer um exemplo básico para você entender essa relação.
Suponhamos que tenhamos uma tabela de Contatos e você queira criar um DAO pra ela.

Começemos, então, pela classe POJO. Nela, devem conter todos os campos da tabela (como disse, é uma referência às tabelas).

public class Contato {

   // aqui são os atributos referentes aos campos da Tabela.
   private Long idContato;
   private String nomeContato;
   private String emailContato;
 
   //Crie os Getters & Setters específicos, para respeitar o conceito de Encapsulamento de Dados.
   //Vou omití-los para não ficar muito grande.
}

Beleza… Então, essa nossa classe acima é considerada uma classe POJO e representa nossa tabela Contatos.
Agora, façamos um DAO para manipular essa Tabela!

public class ContatoDAO {

   public void adicionarRegistro( Contato anContato ) {

      Connection anConnection = ConnectionManager.getInstance().getConnection();
      // Aqui vem código para adicionar o contato no Banco de Dados.
   }
   public void removerRegistro( int anId ) {

      Connection anConnection = ConnectionManager.getInstance().getConnection();
      // Aqui vem código para remover o contato no Banco de Dados.
   }
   public void alterarRegistro( Contato anContato ) {

      Connection anConnection = ConnectionManager.getInstance().getConnection();
      // Aqui vem código para alterar o contato no Banco de Dados.
   }
   public Contato lerRegistro( int anId ) {

      Connection anConnection = ConnectionManager.getInstance().getConnection();
      // Aqui vem código para buscar um contato no Banco de Dados.
   }
}

Não podemos esquecer que, para tratar a conexão com o Banco, devemos fazer uma classe específica:

public class ConnectionManager {

   // Este é o padrão Singleton, permitindo somente uma instância da classe.
   private static ConnectionManager anInstance = null;
   public static ConnectionManager getInstance() {
      
      if ( anInstance == null ) anInstance = new ConnectionManager();
      return anInstance;
   }
   private ConnectionManager() {}

   public Connection getConnection() {
   
      // Aqui vem o código para criar sua conexão.
   }
}

Conseguiu enteder, mais ou menos?
Espero ter ajudado :slight_smile:

Abraços!

Ae pessoal, viajei pelo visto, consegui encontrar algumas coisas relacionada a interface DAO.
Mas mesmo assim não entendi quase nada.

Abraço. rs

[quote=Nicolas Fernandes]Olá, M3g4d3th!
Beleza?

Bom, primeiro, procure entender do que se trata a camada DAO.
Ela se situa no pacote MODEL.
O pacote MODEL é o qual trata das regras de negócio de um projeto.
A classe DAO vai manipular os dados de uma classe POJO.
A classe POJO vai referenciar uma tabela no banco de dados.

Vamos fazer um exemplo básico para você entender essa relação.
Suponhamos que tenhamos uma tabela de Contatos e você queira criar um DAO pra ela.

Começemos, então, pela classe POJO. Nela, devem conter todos os campos da tabela (como disse, é uma referência às tabelas).

public class Contato {

   // aqui são os atributos referentes aos campos da Tabela.
   private Long idContato;
   private String nomeContato;
   private String emailContato;
 
   //Crie os Getters & Setters específicos, para respeitar o conceito de Encapsulamento de Dados.
   //Vou omití-los para não ficar muito grande.
}

Beleza… Então, essa nossa classe acima é considerada uma classe POJO e representa nossa tabela Contatos.
Agora, façamos um DAO para manipular essa Tabela!

public class ContatoDAO {

   public void adicionarRegistro( Contato anContato ) {

      Connection anConnection = ConnectionManager.getInstance().getConnection();
      // Aqui vem código para adicionar o contato no Banco de Dados.
   }
   public void removerRegistro( int anId ) {

      Connection anConnection = ConnectionManager.getInstance().getConnection();
      // Aqui vem código para remover o contato no Banco de Dados.
   }
   public void alterarRegistro( Contato anContato ) {

      Connection anConnection = ConnectionManager.getInstance().getConnection();
      // Aqui vem código para alterar o contato no Banco de Dados.
   }
   public Contato lerRegistro( int anId ) {

      Connection anConnection = ConnectionManager.getInstance().getConnection();
      // Aqui vem código para buscar um contato no Banco de Dados.
   }
}

Não podemos esquecer que, para tratar a conexão com o Banco, devemos fazer uma classe específica:

public class ConnectionManager {

   // Este é o padrão Singleton, permitindo somente uma instância da classe.
   private static ConnectionManager anInstance = null;
   public static ConnectionManager getInstance() {
      
      if ( anInstance == null ) anInstance = new ConnectionManager();
      return anInstance;
   }
   private ConnectionManager() {}

   public Connection getConnection() {
   
      // Aqui vem o código para criar sua conexão.
   }
}

Conseguiu enteder, mais ou menos?
Espero ter ajudado :slight_smile:

Abraços![/quote]

Cara, to aqui tentando criar algo parecido com o que você fez mas na classe ContatoDAO na hora que você diz:

public void adicionarRegistro( Contato anContato ) {

      Connection anConnection = ConnectionManager.getInstance().getConnection();
      // Aqui vem código para adicionar o contato no Banco de Dados.
   }

No caso no ConnectionManager eu fiz a conexão com o banco de dados correto?
Então eu não deveria instanciar um objeto de ConnectionManager dentro do método adicionarRegistro e ai sim informar a tabela?

Rs, desculpa, eu to meio perdido.

Abraço.

Bom, vamos lá…
Com o padrão da arquitetura MVC, o intuito é deixar tudo separadinho!

A classe ConnectionManager serve SOMENTE para criar uma conexão para você!
Beleza, ao criar a conexão, podemos fazer nosso processamento…

public void  adicionarRegistro( Contato anContato ) throws Exception {  
   
       // Cria a conexão com o Banco de Dados.
       Connection anConnection = ConnectionManager.getInstance().getConnection();  
       
       // Crio minha SQL a ser executada.
       String anSQL = " Insert Into Usuarios Values ( NextVal('NextUsuario') , ?, ?) ";

      // Crio um Statement para gerenciar essa SQL.
      PreparedStatement anStatement = anConnection.prepareStatement( anSQL );
                        anStatement.setString( 1, anContato.getNome() );
                        anStatement.setString( 2, anContato.getEmail() );

      // Agora, é só executar essa SQL!
      anStatement.execute();
}  

Dentro do DAO é onde você gerencia todo o código para o Banco de Dados.
A ConnectionManager faz as conexões, o DAO faz os códigos de Banco de Dados.
Tudo separado, entendeu?

Abraços!

[quote=Nicolas Fernandes][quote=M3g4d3th]
No caso no ConnectionManager eu fiz a conexão com o banco de dados correto?
Então eu não deveria instanciar um objeto de ConnectionManager dentro do método adicionarRegistro e ai sim informar a tabela?

Rs, desculpa, eu to meio perdido.
Abraço.
[/quote]

Bom, vamos lá…
Com o padrão da arquitetura MVC, o intuito é deixar tudo separadinho!

A classe ConnectionManager serve SOMENTE para criar uma conexão para você!
Beleza, ao criar a conexão, podemos fazer nosso processamento…

public void  adicionarRegistro( Contato anContato ) throws Exception {  
   
       // Cria a conexão com o Banco de Dados.
       Connection anConnection = ConnectionManager.getInstance().getConnection();  
       
       // Crio minha SQL a ser executada.
       String anSQL = " Insert Into Usuarios Values ( NextVal('NextUsuario') , ?, ?) ";

      // Crio um Statement para gerenciar essa SQL.
      PreparedStatement anStatement = anConnection.prepareStatement( anSQL );
                        anStatement.setString( 1, anContato.getNome() );
                        anStatement.setString( 2, anContato.getEmail() );

      // Agora, é só executar essa SQL!
      anStatement.execute();
}  

Dentro do DAO é onde você gerencia todo o código para o Banco de Dados.
A ConnectionManager faz as conexões, o DAO faz os códigos de Banco de Dados.
Tudo separado, entendeu?

Abraços![/quote]

Então no caso todo o assunto relacionado até aqui em MVC é o MODEL?
O Control seria os métodos que eu vou gerar e o view seria o JSP ou Swing correto?

Abraço.

Justamente!

A camada VIEW é a camada de Apresentação. É nela que é realizada a Interface com o usuário.
A camada CONTROLLER é a camada de comunicação, digamos assim. Ela é a responsável por comunicar a VIEW com a camada de persistência de dados.
A camada MODEL é a que realiza a persistência de dados, como acabamos de fazer ali.

Para comunicar essa nossa camada DAO com a VIEW, deveremos criar uma camada CONTROLLER para realizar a comunicação entre elas, e pronto! O padrão MVC está implantado no seu projeto!

Qualquer dúvida, é só postar aqui que vamos te ajudar no que pudermos!

Abraços!

[quote=Nicolas Fernandes][quote=M3g4d3th]
Então no caso todo o assunto relacionado até aqui em MVC é o MODEL?
O Control seria os métodos que eu vou gerar e o view seria o JSP ou Swing correto?

Abraço.
[/quote]

Justamente!

A camada VIEW é a camada de Apresentação. É nela que é realizada a Interface com o usuário.
A camada CONTROLLER é a camada de comunicação, digamos assim. Ela é a responsável por comunicar a VIEW com a camada de persistência de dados.
A camada MODEL é a que realiza a persistência de dados, como acabamos de fazer ali.

Para comunicar essa nossa camada DAO com a VIEW, deveremos criar uma camada CONTROLLER para realizar a comunicação entre elas, e pronto! O padrão MVC está implantado no seu projeto!

Qualquer dúvida, é só postar aqui que vamos te ajudar no que pudermos!

Abraços! [/quote]

Antes de continuar. Sobre a separação de pacotes. Eu tenho uma dúvida sobre pacotes com SWING.
No caso de pacotes para WEB eu aprendi que se nomeia os pacotes como 'br.com.vinicius.model.DAO".

Como não SWING não é WEB no caso não teria o ‘br.com.’?

Abraço.

Cara, esse lance de pacotes é bem relativo…
EU, por exemplo, quando vou fazer um projeto SWING, coloco os nomes da seguinte maneira:
Se eu chamar o projeto de Agenda, por exemplo…

win.agenda
win.agenda.view
win.agenda.view.usuarios
win.agenda.view.relatorios
win.agenda.controller
win.agenda.controller.tablemodel
win.agenda.model
win.agenda.model.dao
win.agenda.model.pojo
win.agenda.model.service
win.agenda.utils

E por aí vai :stuck_out_tongue:

Se é Web, eu troco o “win” por “web”…
Então, é algo muito relativo, vai da especificação de projetos!

Ah man, eu to muito confuso rs. To aqui tentando quebrar a cabeça, no caso eu to tentando criar uma outra classe pra colocar um main pra testar todas essas classes.

Eu teria que extender a classe ContadoDAO dentro da minha classe que tem o MAIN?

Pq pelo o que eu entendi, eu tenho que “ativar” o método AddRegistro da classe ContatoDAO, correto?

Abraço.

[quote=M3g4d3th]Ah man, eu to muito confuso rs. To aqui tentando quebrar a cabeça, no caso eu to tentando criar uma outra classe pra colocar um main pra testar todas essas classes.

Eu teria que extender a classe ContadoDAO dentro da minha classe que tem o MAIN?

Pq pelo o que eu entendi, eu tenho que “ativar” o método AddRegistro da classe ContatoDAO, correto?
Abraço.[/quote]

O MAIN serve para chamar uma VIEW sua.
A sua VIEW chama o CONTROLLER, e o CONTROLLER acessa o MODEL à bel prazer.

Vamos usar um exemplo pra isso…
Você vai cadastrar um Contato!

Você cria sua View lá, bonitinha…
Qual o papel do Main?

public class Main {
   public static void main( String[] args ) {
   
      new WinClientes().showDialog();
   }
}

Na minha View de Clientes, com certeza haverá um botão Cadastrar, e ele será responsável por chamar o controle específico. Chamarei a classe de Controle de Action.

JButton buttonCadastrar = new JButton();
        buttonCadastrar.setText( "Cadastrar" );
        buttonCadastrar.addActionListener ( new ButtonCadastrar() );

private class ButtonCadastrar implements ActionListener {
   public void actionPerformed( ActionEvent e ) {
      try {
         
         Cliente anCliente = new Cliente();
         /*
         Preenche os campos relativos ao Cliente na classe POJO.
         */
         ClienteAction.getInstance().adicionarRegistro(  anCliente );
      } catch ( Exception anError ) {}    
   }
}

A Action, por sua vez, comunica com as classes que ela precisa comunicar:

public class ClienteAction {
   
   // Padrão Singleton para criar o getInstance().

   public void adicionarRegistro( Cliente anCliente ) {
    
       ClienteService.getInstance().adicionarRegistro( anCliente );
       // Se precisar de outras operações, chama aqui.
   }
}

O Service, por sua vez, executa algum papel de importância dele. Eu executaria conversões, validações e tudo o mais aqui.

public class ClienteService {
   
   // Padrão Singleton para criar o getInstance().

   public void adicionarRegistro( Cliente anCliente ) {
       // Realiza conversões, validações e tudo o mais.
       ClienteDAO.getInstance().adicionarRegistro( anCliente );
   }
}

Aí, agora, entra o papel do nosso DAO!

Consegue visualizar a comunicação entre camadas aqui??

Opa, to de volta, segundona, energia renovada.

Então continuando.

Ainda to tendo dificuldade, eu acho que to pensando de alguma maneira errada. Vou explicar melhor o que eu to fazendo.

Minha dificuldade maior está em um MAIN só para teste que estou criando para inserir um dado no banco de dados. Então eu vou postar como estão as classes.

Classe Contato.

package testedao;

public class Contato {

    private String idContato;
    private String nomeContato;
    private String telefoneContato;

    public String getIdContato() {
        return idContato;
    }

    public void setIdContato(String idContato) {
        this.idContato = idContato;
    }

    public String getNomeContato() {
        return nomeContato;
    }

    public void setNomeContato(String nomeContato) {
        this.nomeContato = nomeContato;
    }

    public String getTelefoneContato() {
        return telefoneContato;
    }

    public void setTelefoneContato(String telefoneContato) {
        this.telefoneContato = telefoneContato;
    }


}

Classe ContatoDAO

package testedao;

import java.sql.Connection;
import java.sql.PreparedStatement;

public class ContatoDAO {

    public void addRegistro(Contato anContato) throws Exception {
        
            Connection anConnection = ConnectionManager.getInstance().getConnection();
            String anSQL = " Insert Into contato Values ( NextVal('NextContato') , ?, ?) ";
            PreparedStatement anStatement = anConnection.prepareStatement(anSQL);
                              anStatement.setString(1, anContato.getNomeContato());
                              anStatement.setString(2, anContato.getTelefoneContato());
                              anStatement.execute();

    }


}

Classe ConnectionManager

package testedao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;

public class ConnectionManager {

    private static ConnectionManager anInstance = null;

    public static ConnectionManager getInstance() {
        if (anInstance == null) {
            anInstance = new ConnectionManager();
        }
        return anInstance;
    }

    private ConnectionManager() {
    }

    public Connection getConnection() throws SQLException {

        Connection conn = null;
        try {
            conn = DriverManager.getConnection("jdbc:postgresql://localhost/proc", "proc", "proc");
            Statement stmt = conn.createStatement();

        } catch (SQLException ex) {
            java.util.logging.Logger.getLogger(ConnectionManager.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            conn.close();
        }
        return conn;
    }

    public static ConnectionManager getAnInstance() {
        return anInstance;
    }

    public static void setAnInstance(ConnectionManager anInstance) {
        ConnectionManager.anInstance = anInstance;
    }
}

Então eu quero uma classe MAIN só para eu adicionar valores para serem adicionados ao banco, e isso eu não to conseguindo fazer, eu não entendi se tenho que instanciar um objeto da classe contato, se tenho que chamar algum método. Realmente eu me perdi nessa parte do MAIN.

No meu banco eu criei uma tabela com o nome ‘contato’, aonde tem as colunas idContato, nomeContato, telefoneContato.

Alguém pode ajudar?

Muito grato.

Opa!
Vamos lá… rs
Façamos sem seguir padrão nem nada, só pra você sacar mais ou menos… Pra seguir o padrão MVC, precisaríamos das classe Controller, Service e tals ^^’

public class Main {

   public static void main( String[] args ) {

      Contato anContato;
      try {

         anContato = new Contato();
         anContato.setNome( "José" );
         anContato.setTelefone( "3423-8568" );
         ContatoDAO.getInstance().addRegistro( anContato );

         anContato = new Contato();
         anContato.setNome( "Maria" );
         anContato.setTelefone( "3422-8533" );
         ContatoDAO.getInstance().addRegistro( anContato );
 
         anContato = new Contato();
         anContato.setNome( "José" );
         anContato.setTelefone( "8856-9687" );
         ContatoDAO.getInstance().addRegistro( anContato );

         } catch ( Exception anError ) {
             
            anError.printStackTrace();
         }
   }
}

A sua classe Main fará chamada das outras classes! É só isso que ela faz!
Era essa a dúvida?

[quote=Nicolas Fernandes][quote=M3g4d3th]
Então eu quero uma classe MAIN só para eu adicionar valores para serem adicionados ao banco, e isso eu não to conseguindo fazer, eu não entendi se tenho que instanciar um objeto da classe contato, se tenho que chamar algum método. Realmente eu me perdi nessa parte do MAIN.

No meu banco eu criei uma tabela com o nome ‘contato’, aonde tem as colunas idContato, nomeContato, telefoneContato.

Alguém pode ajudar?

Muito grato.
[/quote]

Opa!
Vamos lá… rs
Façamos sem seguir padrão nem nada, só pra você sacar mais ou menos… Pra seguir o padrão MVC, precisaríamos das classe Controller, Service e tals ^^’

public class Main {

   public static void main( String[] args ) {

      Contato anContato;
      try {

         anContato = new Contato();
         anContato.setNome( "José" );
         anContato.setTelefone( "3423-8568" );
         ContatoDAO.getInstance().addRegistro( anContato );

         anContato = new Contato();
         anContato.setNome( "Maria" );
         anContato.setTelefone( "3422-8533" );
         ContatoDAO.getInstance().addRegistro( anContato );
 
         anContato = new Contato();
         anContato.setNome( "José" );
         anContato.setTelefone( "8856-9687" );
         ContatoDAO.getInstance().addRegistro( anContato );

         } catch ( Exception anError ) {
             
            anError.printStackTrace();
         }
   }
}

A sua classe Main fará chamada das outras classes! É só isso que ela faz!
Era essa a dúvida?[/quote]

Nossa cara, saquei, agora sim clariou, eu tava em dúvida qual método chamar, de qual classe chamar.
Muito bom. Muito grato mesmo.

Agora que entendi melhor o MVC e o DAO vou começar a fazer um programinha aqui para classificação deu umas mp3s e vou postando nesse mesmo tópico.

Abraço.

Seguinte, dei uma estudada aqui e consegui compreender de uma forma diferente implementação de DAO e entendi um pouco melhor o MVC.

No caso eu estou criando um programinha para documentação de mp3, isso é pra utilidade minha mesmo, aproveitando que eu vejo que é simples fazer e eu to precisando do programa.

Então eu criei as seguintes classes.

Classe Music

package model;

public class Music {

    private long id = 0;
    private String artist;
    private String music;
    private String directory;
    private String media;
    private String genre;
    private String date;

    public String getArtist() {
        return artist;
    }

    public void setArtist(String artist) {
        this.artist = artist;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getDirectory() {
        return directory;
    }

    public void setDirectory(String directory) {
        this.directory = directory;
    }

    public String getGenre() {
        return genre;
    }

    public void setGenre(String genre) {
        this.genre = genre;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getMedia() {
        return media;
    }

    public void setMedia(String media) {
        this.media = media;
    }

    public String getMusic() {
        return music;
    }

    public void setMusic(String music) {
        this.music = music;
    }


}

Classe ConFactory

package model.DAO.banco;

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

public class ConFactory {

    public static final int POSTGRES = 0;
    public static final String PSQLDRIVER = "org.postgresql.Driver";
    private static int banco;

    public static Connection conexao(String url, String nome, String senha, String PSQLDRIVER) throws ClassNotFoundException, SQLException {
        switch (banco) {
            case POSTGRES:
                Class.forName(PSQLDRIVER);
                break;
        }
        return DriverManager.getConnection(url, nome, senha);
    }
}

Classe DAOMusic

package model.DAO;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JOptionPane;
import model.DAO.banco.ConFactory;
import model.Music;

public class DAOMusic {

    private final String url = "jdbc:postgresql://localhost/proc";
    private final String nome = "proc";
    private final String senha = "proc";
    private Connection con;
    private Statement stmt;

    private void printError(String msg, String msgErro) {
        JOptionPane.showMessageDialog(null, msg, "Erro crítico", 0);
        System.err.println(msg);
        System.out.println(msgErro);
        System.exit(0);
    }

    private void connect() throws SQLException {
        try {
            con = ConFactory.conexao(url, nome, senha, ConFactory.PSQLDRIVER);
            stmt = con.createStatement();
            System.out.println("Conectado!");
        } catch (ClassNotFoundException e) {
            printError("Erro ao carregar o driver", e.getMessage());
        } catch (SQLException e) {
            printError("Erro ao conectar", e.getMessage());
        }
    }

    private void close() {
        try {
            stmt.close();
            con.close();
            System.out.println("Conexão Fechada");
        } catch (SQLException e) {
            printError("Erro ao fechar conexão", e.getMessage());
        }
    }

    public void delete(String id) throws SQLException {
        connect();
        try {
            stmt.executeUpdate("DELETE FROM musicorg WHERE id = '" + id
                    + "';");
        } catch (SQLException e) {
            printError("Erro ao apagar pessoas", e.getMessage());
        } finally {
            close();
        }
    }

    public Vector<Music> searchAll() throws SQLException {
        connect();
        Vector<Music> resultados = new Vector<Music>();
        ResultSet rs;
        try {
            rs = stmt.executeQuery("SELECT * FROM musicorg");
            while (rs.next()) {
                Music temp = new Music();
                // pega todos os atributos de Music
                temp.setId(rs.getLong("id"));
                temp.setArtist(rs.getString("artist"));
                temp.setMusic(rs.getString("music"));
                temp.setMedia(rs.getString("media"));
                temp.setGenre(rs.getString("genre"));
                temp.setDirectory(rs.getString("directory"));
                temp.setDirectory(rs.getString("date"));
                resultados.add(temp);
            }
            return resultados;
        } catch (SQLException e) {
            printError("Erro ao buscar pessoas", e.getMessage());
            return null;
        }
    }

    public void atualizar(Music music) throws SQLException {
        connect();
        String com = "UPDATE musicorg SET music = '" + music.getMusic()
                + "', artist =" + music.getArtist() + ", genre = '"
                + music.getGenre() + "', directory ='" + music.getDirectory()
                + "', date ='" + music.getDate() + "', media ='" + music.getMedia()
                + "' WHERE  id = '" + music.getId() + "';";
        System.out.println("Atualizada!");
        try {
            stmt.executeUpdate(com);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            close();
        }
    }

    public Vector<Music> search(Long id) throws SQLException {
        connect();
        Vector<Music> resultados = new Vector<Music>();
        ResultSet rs;
        try {
            rs = stmt.executeQuery("SELECT * FROM musicorg WHERE id LIKE '"
                    + id + "%';");
            while (rs.next()) {
                Music temp = new Music();
                // pega todos os atributos de Music
                temp.setId(rs.getLong("id"));
                temp.setArtist(rs.getString("artist"));
                temp.setMusic(rs.getString("music"));
                temp.setMedia(rs.getString("media"));
                temp.setGenre(rs.getString("genre"));
                temp.setDirectory(rs.getString("directory"));
                temp.setDirectory(rs.getString("date"));
                resultados.add(temp);
            }
            return resultados;
        } catch (SQLException e) {
            printError("Erro ao buscar pessoas", e.getMessage());
            return null;
        }
    }

    public void Add(Music music) throws SQLException {
        connect();
        try {
            stmt.executeUpdate("INSERT INTO musicorg VALUES('"
                    + music.getId() + "', '"
                    + music.getArtist() + "', '"
                    + music.getGenre() + "', '"
                    + music.getDirectory() + "', '"
                    + music.getMedia() + "', '"
                    + music.getDate() + "', '"
                    + music.getMusic() + "', '" );
            System.out.println("Inserida!");

        } catch (SQLException e) {
            printError("Erro ao inserir Pessoa", e.getMessage());

        } finally {
            close();
        }
    }

}

Beleza, além disso eu criei uma tabela ‘musicorg’ que tem as seguinte colunas, ‘id, artist, music, directory, genre, date, media’.

Agora eu vou começar a criar em SWING essa tabela, alguém tem algum link bom pra explicar sobre SWING e tabelas do tipo excel?

Outra dúvida sobre o MVC, o que seria o Control nesse tipo de aplicação?

Grato novamente.

Abraço.

Ae eu to de volta com mais dúvidas.

Seguinte, eu estou fazendo o programa com o JFrame do NetBeans, beleza, consegui criar muita coisa, agora estou com um problema, criei uma JTable e tenho um botão Atualizar, eu gostaria que quando apertasse esse botão atualizar atualizasse do banco do dados e mostrasse na Jtable.

Eu tentei com um for, mas eu acho que não seja isso, tentei também alguns comandos de addRow ou algo assim mas também não consegui.

Alguém pode ajudar?

Grato.