Вы находитесь на странице: 1из 13

UMA APLICAO JAVA COM ACESSO AO BANCO DE DADOS ARQUITETURA MVC

Criar os pacotes conforme figura abaixo:

1- CRIAO DO PROJETO
No Eclipse, na view Project Explorer, clique com o direito e selecione New>JPA Project.

Na caixa de dilogo New JPA Project, digite o nome do projeto em Project name. No exemplo que usaremos ser chamado de ExemploJPAJDBC. Clique no boto Next para prosseguir.

3- PACOTE model_persistencia
3.1. CLASSE BD

Acompanhe o slide 2_ConexaoBanco_Java. Consulte o arquivo: Importar e Configure o BuildPath.

2- ARQUITETURA MVC
Clique com o boto direito do mouse sobre src, do seu projeto JPA. Selecione no menu de contexto New>Package.

3.2.

CLASSE de Conexo ao Banco de Dados

1. Crie a classe BD para conexo ao Banco de Dados no pacote model_persistencia: package ConexaoBancoDados; import import import import import java.sql.Connection; java.sql.DriverManager; java.sql.ResultSet; java.sql.SQLException; java.sql.Statement;

public class BD{ public Connection connection = null; public Statement statement = null; public ResultSet resultSet = null; /** * mtodo que faz conexo com o banco de dados SQL_Server ou false em caso negativo */ public boolean getConnection(){ try{ retorna true se houve sucesso,

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); final String login="sa"; // login para conexo ao BD final String senha = "123456"; // senha do BD final String banco="ExemploJavaBanco"; // nome do BD final String servidor = "localhost"; // endereo do BD final String url = "jdbc:sqlserver://"+servidor+":1433;databasename="+banco; connection = DriverManager.getConnection(url,login,senha); statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); return(true); } catch (ClassNotFoundException erro){ System.err.println("Erro ao carregar o driver: "+erro.getMessage()); erro.printStackTrace(); return false; } catch(SQLException erro){ System.err.println("Erro ao conectar: "+erro.getMessage()); erro.printStackTrace(); return false; } } /** * Fecha ResultSet, Statement e Connection */ public void close(){ closeResultSet(); closeStatement(); closeConnection(); }

Desenvolvimento de Software II ETEC Professora Lcia

private void closeConnection(){ try{ if(connection!=null){ connection.close(); } } catch(SQLException erro){ erro.printStackTrace(); } } private void closeStatement(){ try{ if(statement!=null){ statement.close(); } } catch(Exception erro){ erro.printStackTrace(); } } private void closeResultSet(){ try { if(resultSet!=null){ resultSet.close(); } } catch(Exception erro){ erro.printStackTrace(); } }

Existem outras formas de escrever o cdigo para conexo de banco de dados, tente criar de outra maneira.

/** * Carrega o resultSet com o resultado do script SQL */ public void setResultSet(String sql){ try{ resultSet = statement.executeQuery(sql); } catch(SQLException erro){ erro.printStackTrace(); } }

4- Pacote view
Clique com o boto direito do mouse sobre o pacote view, do seu projeto JPA. Selecione no menu de contexto New>VisualClass. Se no encontrar, selecione New>Other>Java>VisualClass. no menu

Para exibir o palette com os componentes Swing, acesse Window>Other>General>Palette.

Arraste o componente at o JFrame j criado, altere as propriedades dos componentes na aba Property.

Agora, crie o formulrio conforme figura abaixo:

Aps a criao completa do formulrio, criado um cdigo automaticamente. Insira o mtodo abaixo antes do trmino da classe.

Trmino da classe FormCliente.java


Desenvolvimento de Software II ETEC Professora Lcia

Procure o mtodo abaixo na classe FormCliente, e insira a seguinte instruo:

5- PACOTE model_domnio e PACOTE model_persistencia

5.1 CLASSE ClienteBean

public class ClienteBean { private int codigo; private String nome; public ClienteBean() { this(0,""); } public ClienteBean(int codigo, String nome) { this.codigo = codigo; this.nome = nome; } public int getCodigo() { return codigo; } public void setCodigo(int codigo) { this.codigo = codigo; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } }

5.2- ClienteDAO
public class ClienteDAO { BD bd = new BD(); String men = ""; public String incluir(ClienteBean cliAux){ if (bd.getConnection()){ /* O campo codigo na tabela cliente eh do tipo int. Para inserir um novo usuario eh necessario obter o proximo codigo. (nesse caso o ultimo codigo armazenado)*/ try { PreparedStatement stmt = bd.connection.prepareStatement("select max(codigo) from cliente"); ResultSet rs = stmt.executeQuery(); rs.next(); // Incrementando o ultimo codigo armazenado temos o codigo do novo usuario int proximoCodigo = rs.getInt(1) + 1; /* Aqui utilizamos a classe CallableStatement que permite a insercao de string de SQL. Neste caso uma procedure. */ CallableStatement proc = bd.connection.prepareCall("{call sp_insere_cliente(?,?,?)}" ); proc.setInt(1, proximoCodigo); proc.setString(2, cliAux.getNome()); proc.registerOutParameter(3,Types.VARCHAR); proc.executeUpdate(); men = proc.getString(3) ; } catch (SQLException e) { e.printStackTrace(); } finally{ try{ Desenvolvimento de Software II ETEC Professora Lcia parametros (?) na construcao da A funcao max() retorna o maior valor da coluna especificada

bd.close(); }catch(Exception e){ e.printStackTrace(); } } } return men; }

public ClienteBean ler(ClienteBean cli) { if(bd.getConnection()){ try { PreparedStatement stmt = bd.connection.prepareStatement("select * from cliente where codigo = " + cli.getCodigo()); ResultSet rs = stmt.executeQuery(); if(rs.next() == true){ cli.setCodigo(rs.getInt(1)); cli.setNome(rs.getString(2)); bd.close(); } else{ JOptionPane.showMessageDialog(null,"Cliente no cadastrado"); cli.setCodigo(0); cli.setNome(""); } } catch (SQLException e) { e.printStackTrace(); } finally{ try{ bd.close(); }catch(Exception e){ e.printStackTrace(); } } 7

} return cli; }

public void excluir(ClienteBean cli){ if (bd.getConnection()){ try { PreparedStatement stmt = bd.connection.prepareStatement("delete from cliente where codigo = ?;"); stmt.setString(1, Integer.toString(cli.getCodigo())); stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally{ try{ bd.close(); }catch(Exception e){ e.printStackTrace(); } } } } ********************************************************************************************************************************** // *** Metodo para consulta geral de usuarios - listando em MessageDialog public void listar(){ if(bd.getConnection()){ try { PreparedStatement stmt = bd.connection.prepareStatement("select * from cliente;"); //A classe ResultSet permite colher os resultados da execucao de uma query no banco de dados. //Esta classe apresenta uma serie de metodos para prover o acesso aos dados ResultSet rs = stmt.executeQuery(); String relacao = "Relao de clientes cadastrados \n"; while (rs.next()) { Desenvolvimento de Software II ETEC Professora Lcia

// A rs tem o formato de uma matriz onde o retorno de uma consulta pode ser tratado // como muma tabela. O metodo next pula para a proxima linha. // Os metodos de acesso aos dados contidos na rs sao gets especificos para o tipo de dado armazenado. // Identifica-se o campo desejado pelo seu referente indice (coluna) na linha acessada relacao = relacao + "\n Cod: " + rs.getString(1).toString() + " - Nome: " + rs.getString(2); // Observe que rs.getString(1) equivale ao codigo que por sua vez eh int, mas, como a intencao // eh montar uma String de mensagem o dados pode ser recuperado ja com seu tipo convertido } rs.close(); // Apresenta o resultado da consulta JOptionPane.showMessageDialog(null, relacao + "\n"); } catch (SQLException e) { e.printStackTrace(); /* Eh importante liberar os recursos alocados pelo banco de dados para a execucao da manipulacao dos dados. Podemos fazer isso fechando o Statement, que libera os recursos associados a execucao desta consulta mas deixa a conexao aberta para a execucao de uma proxima consulta, ou fechando diretamente a conexao, que encerra a comunicacao com o banco de dados. Para termos certeza de que vamos encerrar esta conexao mesmo que uma excecao ocorra, reservamos o fechamento para a clausula finally() do tratamento de excecoes. */ } finally{ try{ bd.close(); }catch(Exception e){ e.printStackTrace(); } } } }

public void alterar(ClienteBean cli) { if(bd.getConnection()){ try { PreparedStatement ps = bd.connection.prepareStatement("update cliente set nome = ? where codigo = ?;"); ps.setString(1, cli.getNome()); ps.setString(2, Integer.toString(cli.getCodigo())); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally{ try{ bd.close(); }catch(Exception e){ e.printStackTrace(); } } } } }

Desenvolvimento de Software II ETEC Professora Lcia

6- PACOTE controller

11

7- Praticando...

Em nosso projeto, j est implementado: Testa Conexo Cadastrar Excluir Sair

1. Na classe ClienteDAO existe um exemplo do mtodo listar e alterar. Controle os respectivos botes. 2. Crie o pesquisar por cdigo e exiba em uma caixa de dilogo. Aproveite o exemplo do mtodo ler na classe ClienteDAO. 3. Limpe os campos quando necessrio. Crie um mtodo.

8- Script do banco de dados.

Desenvolvimento de Software II ETEC Professora Lcia

13

Вам также может понравиться