Tutorial Java Swing + Database part2

Continuação do tutorial java swing, https://newbl0g.wordpress.com/2011/02/19/tutorial-java-swing-database/

Capítulo 2 – Criando tela do sistema

Siga os passos abaixo para criar uma tela de cadastro simples:

1º – Clicar com botão direito sobre o pacote ~visual.impl e ir em Novo > Outro… (a ultima opção).

2º – Selecionar a categoria “Formulários GUI Swing” e tipo de arquivo “Formulário JInternalFrame”

3º – Alterar o nome da classe para CadFuncionario

4º – Vamos adicionar os componentes, para passar as informações que o funcionário vai ter nesse momento:

  • Rótulos e caixa de texto com:
  • Nome
  • Endereco
  • CPF
  • Dois botões de opção para o Sexo, Masculino ou Feminino.

Deve ter os componentes como imagem abaixo. (Adicionar da paleta para a tela do projeto)

5º – Agora vamos implementar os botões Limpar e Sair

Clicar com botão direito sobre o botão sair e ir ao menu Events > Action > actionPerformed.

No código é criado um método para criar as ações que o botão vai gerar, adicionar no método o código: this.dispose();

Clicar com botão direito sobre o botão Limpar e ir ao menu Events > Action > actionPerformed.

No método adicionar o código: tfNome.setText(“”);        tfEnd.setText(“”);        tfCPF.setText(“”);

6º – Alterar a classe Telaprincipal para acessar o cadastro de funcionário.

Na parte de projeto da tela principal, clicar na paleta de menus e clicar com botão direito ir ao item adicionar menu.

Alterar o texto para Cadastro e a variável para menuCadastro.

Adicionar ao menu um item de menu, alterar o texto para Funcionario e a variavel para itemFunc.

Adicionar o evento actionPerformed no item de menu.

No método criado precisa chamar a tela de cadastro, mas se já estiver aberta não deve permitir.

Para isso é necessário criar uma variável da tela de cadastro na classe principal. Ex: private CadFuncionario telaCadFuncionario;

No método itemFuncActionPerformed vamos adicionar o seguinte código:

if( (telaCadFuncionario==null) || (!telaCadFuncionario.isVisible()) ){

telaCadFuncionario = new CadFuncionario();

desktopPane.add(telaCadFuncionario);

telaCadFuncionario.setVisible(true);        }

7º – Alterar a classe principal para instanciar a TelaPrincipal, para isso vamos comentar o método principal da TelaPrincial.java.

Coloque os caracteres /* antes do inicio do método puclib static void Main(String args[]) e após coloque */, deve ficar assim:

8º – A classe principal deve chamar a Tela principal com o seguinte código:

TelaPrincipal principal = new TelaPrincipal();

principal.setLocationRelativeTo(null);

principal.setVisible(true);

Pronto, agora podemos rodar o projeto (F6) para testar a aplicação visual.

Capítulo 3 – Criando a classe de negócio

Seguir os passos abaixo para implementar a classe de negócio Funcionário:

1º – O funcionário precisa dos campos, vamos editar a classe e inserir as varáveis Nome, Endereço, CPF e Sexo com visibilidade private.

Vamos refatorar os campos e encapsular para utilizar sempre o padão de programação vigente, para isso clicar com botão direito em um campo

ir ao menu Refatorar > Encapsular Campos…

2º – Agora temos que criar um método publico booleano gravar()

nesse método apenas vamos passar os campos para a classe DAO gravar no banco de dados e na classe DAO apenas vamos montar a estrutura para no próximo capítulo implementar

OBS: o print está com o código que fiz na pressa, hehe, a rigor fica melhor assim:

return dao.gravar(…)

Capítulo 4 – Criando as classes de persistência

Agora vamos implementar as classes de persistência, será necessário duas classes para realizar a ligação do banco de dados.

Uma vou chamar de FabricaConexao e a FuncionarioDAO que ja foi criada, então após criar a classe FabricaConexao (no pacote ~persist.impl, claro) é necessário criar os campos: user, password e driver com visibilidade private e do tipo String.

Atenção: será explicado apenas o simples para a criação dessa classe. O ideal é criar uma classe que faça Gerenciamento da conexão. Devido ao tempo será apenas implementado o método pegarConexao().

O método pegar conexão irá retornar uma classe Connection do pacote java.sql

então a classe deve irá ficar assim:

public class FabricaConexao{

private String driver = “jdbc:h2:~/db/FolhaPgto”;

private String user = “desktop”;

private String pass = “desktop”;

public Connection pegaConexao(){

return DriverManager.getConnection(driver,user,pass);

}

}

….

bom tempo depois, voltei para completar o tuto.

a Classe que gerencia conexão

package ~.persistencia.impl;

import java.sql.*;
/**
*
* @author Paulo.Mariano
*/
public class GerenciaConexao {

private static String user = “desktop”;
private static String pass = “desktop”;
private static String url = “jdbc:derby://localhost:1527/FOLHAPGTO”;

public static void fechaConexao(Connection con)
{
try{
if(con != null){con.close();}
} catch (SQLException ex) {
System.out.println(“erro”+ex);
}

}

public static void fechaConexao(Connection con,PreparedStatement ps)
{
try{
if(ps != null){ps.close();}

if(con != null){con.close();}
} catch (SQLException ex) {
System.out.println(“erro”+ex);
}

}

public static void fechaConexao(Connection con,PreparedStatement ps,
ResultSet rs) {
try{
if(rs != null){rs.close();}

if(ps != null){ps.close();}

if(con != null){con.close();}
} catch (SQLException ex) {
System.out.println(“erro”+ex);
}
}

public static void fechaConexao(Connection con,Statement st,
ResultSet rs) {
try{
if(rs != null){rs.close();}

if(st != null){st.close();}

if(con != null){con.close();}
} catch (SQLException ex) {
System.out.println(“erro”+ex);
}
}

public static Connection pegaConexao() {
try {
return DriverManager.getConnection(url, user, pass);
} catch (SQLException ex) {
System.out.println(“erro”+ex);
}
}

}

>>> agora a classe DAO e a implementacao

package br.com.conexao;

import java.sql.*;

public class Dao {

private Connection con;
private Statement stm;

/**
* Construtor, por padrão cria conexão com o banco MySql.
* @author Rogério Figueiredo.
*/
public Dao() {
this.con = new Conexao().getConexao();
}

/**
* <b>CathoDao</b> Método construtor
* @param servidor Passar o endereço do servidor ex: internomaster.devel
* @param porta Passar a porta ex: 9999
* @param usuario Passar o usuário que tem acesso ao servidor ex: dev_roger
* @param senha Passae a sua senha ex: 157567
* @author Rogério Figueiredo.
*/
public Dao(String servidor,String porta,String usuario, String senha) {

this.con = new Conexao(servidor, porta,usuario, senha).getConexao();

}

/**
* Executa um comando de seleção e retorna o resultado.
* @param dao – Passe a Dao.
* @param query – Passe a instrução sql.
* @return – Retorna o resultado.
* Lembrando que se sua conexão for ODBC o nome da tabela do select deve ser o nome da planilha (Ex.: Plan1) e não do arquivo xlsx
*             E na consulta SQL o nome da tabela está entre colchetes e o nome terminado por $
*             Ex.: Select * From [Plan1$]
* @author Rogério Figueiredo.
*/
public ResultSet executarSelect(Dao dao, String query) {
try {
stm = dao.con.createStatement();
return stm.executeQuery(query);
} catch (SQLException e) {
return null;
}

}

/**
* <b>CathoDao</b> * Método construtor, cria Conexão ODBC
*
* @param driverODBC
*            Informe o driver ODBC criado. Para criar um ODBC acessando um
*            arquivo do Excel você deve acessar: Painel de Controle –
*            Ferramentas Administrativas – Configurar fontes de dados ODBC
*            – Adicionar – Driver do Microsoft Excel Informar o nome da sua
*            fonte de dados (que é o nome que será passado nesse
*            parâmetro), Informar Versão: Excel 12.0 (para arquivos .xlsx)
*            Selecione na pasta de trabalho o arquivo que você criou com os
*            dados e clique em OK
*            @author Rogério Figueierdo.
*/
public Dao(String driverODBC) {
this.con = new Conexao(driverODBC).getConexao();
}

/**
* Usado para fazer um Update no banco.
* @param dao
* @param sql
* Passe o comando sql que irá realizar a alteração.
* @return
* Retorna verdadeiro se ocorreu com sucesso ou falso se deu algum problema.
* @author Rogério Figueiredo
*/
public boolean executarUpdate(Dao dao, String sql){
try
{
stm = dao.con.createStatement();
stm.executeUpdate(sql);
desconectar();
}catch(SQLException e)
{
return false;
}
return true;
}

/**
* Usado para fazer a exclusão de um ou mais registros no banco.
* @param dao
* @param sql
* Passe o comando sql que irá realizar a exclusão.
* @return
* Retorna verdadeiro se ocorreu com sucesso ou falso se deu algum problema.
* @author Rogério Figueiredo
*/
public boolean executarDelete(Dao dao, String sql){
try
{
stm = dao.con.createStatement();
stm.executeUpdate(sql);
desconectar();
}catch(SQLException e)
{
return false;
}
return true;
}

/**
* Usado para fazer inclusão de dados.
* @param dao
* @param sql
* Passe o comando sql que irá realizar a inclusão.
* @return
* Retorna verdadeiro se ocorreu com sucesso ou falso se deu algum problema.
* @author Rogério Figueiredo
*/
public boolean executarInsert(Dao dao, String sql){
try
{
stm = dao.con.createStatement();
stm.executeUpdate(sql);
desconectar();
}catch(SQLException e)
{
return false;
}
return true;
}

public void desconectar() {
try {
if (con!=null)
this.con.close();
if (stm!=null)
this.stm.close();
} catch (Exception e) {
System.out.println(“Problema ao desconectar! ” + e);
System.exit(0);
}
}

public Connection getConexao(){
return con;
}

}

>>> agora entidade funcionario do banco

/*
* Classe para acesso a dados da entidade Funcionario
*/

package appfolhapgto.persistencia.impl;

import appfolhapgto.excecao.FolhaPgtoExcecao;
import appfolhapgto.negocio.BO.FuncionarioBO;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* @author Paulo.Mariano
*
* Classe criada apartir do seguinte script:
CREATE TABLE app.FUNCIONARIO(
FUN_COD INT,
FUN_NOME VARCHAR(100),
SET_COD INT,
CAR_COD INT,
FUN_ESCOLARIDADE INT,
FUN_SEXO int,
FUN_DATANASCIMENTO VARCHAR(50),
FUN_ESTADOCIVIL INT,
PRIMARY KEY (FUN_COD)
);
*/
public class FuncionarioDAO extends DAO {
public void atualiza(FuncionarioBO bo) throws FolhaPgtoExcecao{
StringBuilder atualiza = new StringBuilder(“UPDATE APP.FUNCIONARIO SET “);
atualiza.append(“FUN_NOME”).append(“='”).append(bo.getNome()).append(“‘,”);
atualiza.append(“CAR_COD”).append(“=”).append(bo.getCodCargo()).append(“,”);
atualiza.append(“SET_COD”).append(“=”).append(bo.getSetor()).append(“,”);
atualiza.append(“FUN_SEXO”).append(“=”).append(bo.getSexo()).append(“,”);
atualiza.append(“FUN_DATANASCIMENTO”).append(“='”).append(bo.getDataNascimento()).append(“‘,”);
atualiza.append(“FUN_NACIONALIDADE”).append(“='”).append(bo.getNacionalidade()).append(“‘,”);
atualiza.append(“FUN_TELEFONEOBS”).append(“= ‘”).append(bo.getTelefoneObs()).append(“‘ WHERE FUN_COD =”).append(bo.getCod());

this.executaSQL(atualiza.toString());
}

public void gravar(FuncionarioBO bo) throws FolhaPgtoExcecao {
try {

StringBuilder insert =
new StringBuilder(
“INSERT INTO APP.FUNCIONARIO ”
+ “(FUN_COD,FUN_NOME,CAR_COD,SET_COD,FUN_ESCOLARIDADE,FUN_SEXO,”
+ “FUN_DATANASCIMENTO,FUN_ESTADOCIVIL,FUN_NOMECONJUGUE,”
+ “FUN_DATANASCIMENTOCONJUGUE,FUN_NOMEMAE,FUN_NOMEPAI,”
+ “FUN_NATURALIDADE,FUN_NACIONALIDADE,FUN_OBSERVACOES,”
+ “FUN_RGNUMERO,FUN_RGDATAEMISSAO,FUN_RGORGEXP,FUN_CPF,”
+ “FUN_CTPS,FUN_PISNUMERO,FUN_PISDATAEMISSAO,FUN_TITULONUMERO,”
+ “FUN_TITULODATAEMISSAO,FUN_TITULOZONA,FUN_TITULOORGEXP,”
+ “FUN_RESERVISTANUMERO,FUN_RESERVISTADATAEMISSAO,FUN_CEP,”
+ “FUN_LOGRADOURO,FUN_BAIRRO,FUN_CIDADE,FUN_ESTADO,FUN_TELEFONE,”
+ “FUN_CELULAR,FUN_TELEFONEOBS) VALUES (”
);
insert.append(bo.getCod()).append(“,'”);
insert.append(bo.getNome()).append(“‘,”);
insert.append(bo.getCodCargo()).append(“,”);
insert.append(bo.getSetor()).append(“,”);
insert.append(bo.getEscolariadade()).append(“,”);
insert.append(bo.getSexo()).append(“,'”);
insert.append(bo.getDataNascimento()).append(“‘,”);
insert.append(bo.getEstadoCivil()).append(“,'”);
insert.append(bo.getTelefoneObs()).append(“‘)”);

this.executaSQL(insert.toString());
} catch (Exception ex) {
StringBuilder mensagem = new StringBuilder
(“Não foi possivel gravar dao”);
mensagem.append(“\ncausa:”).append(ex);
throw new FolhaPgtoExcecao(mensagem.toString());
}
}

public List<FuncionarioBO> getAll() throws FolhaPgtoExcecao{
ResultSet rs = null;
List<FuncionarioBO> lista = new ArrayList();

try{

this.conecta();

rs = this.executaSQLcomRs(“SELECT * FROM APP.FUNCIONARIO”);

while(rs.next()){
FuncionarioBO fun = new FuncionarioBO();

fun.setCod(rs.getInt(“FUN_COD”) );
fun.setNome(rs.getString(“FUN_NOME”));
fun.setCPF(rs.getString(“FUN_CPF”));
fun.setSetor(rs.getInt(“SET_COD”));
fun.setCodCargo(rs.getInt(“CAR_COD”));
fun.setEscolariadade(rs.getInt(“FUN_ESCOLARIDADE”));
fun.setSexo(rs.getInt(“FUN_SEXO”));
fun.setDataNascimento(rs.getString(“FUN_DATANASCIMENTO”));
fun.setEstadoCivil(rs.getInt(“FUN_ESTADOCIVIL”));
lista.add(fun);
}

}catch(Exception e){
StringBuilder mensagem = new StringBuilder
(“Não foi possivel buscar funcionarios”);
mensagem.append(“\ncausa:”).append(e);
throw new FolhaPgtoExcecao(mensagem.toString());
}finally{
this.desconecta(rs);
}

return lista;
}

private final String select =
“SELECT * FROM APP.FUNCIONARIO WHERE”;

public FuncionarioBO getFuncionario(String criterio) throws FolhaPgtoExcecao{
ResultSet rs = null;
StringBuilder busca = new StringBuilder(select);
busca.append(” FUN_NOME LIKE ‘%”).append(criterio).append(“%'”);
FuncionarioBO fun = null;

try{

this.conecta();

rs = this.executaSQLcomRs(busca.toString());

while(rs.next()){
fun = new FuncionarioBO();

fun.setCod(rs.getInt(“FUN_COD”) );
fun.setNome(rs.getString(“FUN_NOME”));
fun.setCPF(rs.getString(“FUN_CPF”));
fun.setCodCargo(rs.getInt(“CAR_COD”));

}

}catch(Exception e){
StringBuilder mensagem = new StringBuilder
(“Não foi possivel buscar funcionarios”);
mensagem.append(“\ncausa:”).append(e);
throw new FolhaPgtoExcecao(mensagem.toString());
}finally{
this.desconecta(rs);
}

return fun;
}

public FuncionarioBO getFuncionario(int cod) throws FolhaPgtoExcecao{
ResultSet rs = null;

StringBuilder busca = new StringBuilder(select);
busca.append(” FUN_COD = “).append(Integer.toString(cod));
FuncionarioBO fun = null;

try{

this.conecta();

rs = this.executaSQLcomRs(busca.toString());

while(rs.next()){
fun = new FuncionarioBO();

fun.setCod(rs.getInt(“FUN_COD”) );
fun.setNome(rs.getString(“FUN_NOME”));
fun.setCPF(rs.getString(“FUN_CPF”));
fun.setSetor(rs.getInt(“SET_COD”));
fun.setCodCargo(rs.getInt(“CAR_COD”));
fun.setEscolariadade(rs.getInt(“FUN_ESCOLARIDADE”));
fun.setSexo(rs.getInt(“FUN_SEXO”));
fun.setDataNascimento(rs.getString(“FUN_DATANASCIMENTO”));
fun.setEstadoCivil(rs.getInt(“FUN_ESTADOCIVIL”));

}

}catch(Exception e){
StringBuilder mensagem = new StringBuilder
(“Não foi possivel buscar funcionarios”);
mensagem.append(“\ncausa:”).append(e);
throw new FolhaPgtoExcecao(mensagem.toString());
}finally{
this.desconecta(rs);
}

return fun;
}

public void excluir(int cod) throws FolhaPgtoExcecao{
StringBuilder sql = new StringBuilder(“DELETE FROM APP.FUNCIONARIO WHERE FUN_COD = “);
sql.append(cod);

this.executaSQL(sql.toString());

}

}

não terminei o post mas quem quiser eu ajudo a prosseguir….

  1. #1 por ptcmariano em 28/06/2012 - 23:01

    Huahua, lembrei de quando fiz esse trabalho, foi maior mão de obra pra sair alguma coisa kkkk

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: