Conexao Java Com Banco de Dados Mysql v5

download Conexao Java Com Banco de Dados Mysql v5

of 29

description

Este documento contém material desenvolvido pelo professor Douglas Tybel da Faculdade Vale doCricaré em São Mateus/Es. Esta apostila tem como objetivo facilitar o ensino da disciplina com base emmuitos exercícios práticos, trabalhando assim a linguagem e exercitando novas técnicas cada vez maisevolutivas.

Transcript of Conexao Java Com Banco de Dados Mysql v5

FACULDADE UNIVC SO MATEUS/ES

APOSTILA LINGUAGEM PROGRAMAOLINGUAGEM JAVA v5DOUGLAS TYBEL 10/28/2010

Este documento contm material desenvolvido pelo professor Douglas Tybel da Faculdade Vale do Cricar em So Mateus/Es. Esta apostila tem como objetivo facilitar o ensino da disciplina com base em muitos exerccios prticos, trabalhando assim a linguagem e exercitando novas tcnicas cada vez mais evolutivas. Prof. Douglas O. Tybel

INTRODUO ........................................................................................................................................ 1 FBRICA DE CONEXES..........................................................................................................................2 IMPORTS NECESSARIOS PARA A CLASSE DE CONEXO: ............................................................................................ 3 CDIGO FONTE DA CLASSE CONEXAO:................................................................................................................ 3 EXEMPLO DA CLASSE CONEXAO .................................................................................................................. 4 EXECUTAR COMANDO INSERT NO BANCO DE DADOS ............................................................................ 5 EXEMPLO .................................................................................................................................................. 6 EXECUTANDO CONSULTA NO BANCO DE DADOS ...................................................................................7 COMO RECUPERAR VALORES DE UM RESULTSET................................................................................................... 7 PRATICAR .................................................................................................................................................. 8 ENTENDENDO COMPONENTE JTABLE .................................................................................................... 9 EXEMPLO POPULAR JTABLE A PARTIR RESULTADO DE CONSULTA SQL .................................................. 11 PRATICAR ................................................................................................................................................ 12 CADASTRO SIMPLES EM JAVA SEM USO DE CLASSE ............................................................................. 13 CRIAR CLASSE DE ENTIDADE JAVA........................................................................................................ 14 CRIAR MTODO SETCADASTAR() ................................................................................................................ 16 EXEMPLO DA CLASSE CONTATOS ............................................................................................................ 19 CDIGO DO BOTO CADASTRAR USANDO AS TCNICAS DE ORIENTAO A OBJETO ................................................. 20 PRATICAR ................................................................................................................................................ 21 CRIAR MTODO GETCONSULTAR() COM RETORNO DO TIPO RESULTSET ............................................. 22 CDIGO USADO NO BOTO CONSULTAR COM TCNICAS ORIENTAO A OBJETOS ...................................................... 23 PRATICAR ................................................................................................................................................ 24 RECUPERAR DADOS DO JTABLE ........................................................................................................... 25 DESENVOLVER O CDIGO PARA RECUPERAR OS DADOS DO JTABLE ......................................................................... 26 CONCLUSO......................................................................................................................................... 27

Prof. Douglas O. Tybel

1

INTRODUOConectar-se a um banco de dados com Java feito de maneira diferenciada. Para evitar que cada banco tenha a sua prpria API e conjunto de classes e mtodos, temos um nico conjunto de interfaces muito bem definidas que devem ser implementadas. Esse conjunto de interfaces fica dentro do pacote java.sql 1 e nos referiamos a esta API como JDBC .

Cliente

Interface JDBC

Implementao JDBC MySQL

DB

Entre as diversas interfaces deste pacote, existe a interface Connection que define, entre outros, mtodos para executar uma query, comitar transao e fechar a conexo. Caso queiramos trabalhar 2 com o MySQL , precisamos de classes concretas que implementem essas interfaces do pacote java.sql. Esse conjunto de classes concretas quem far a ponte entre o cdigo cliente que usa a API JDBC e o banco de dados. So essas classes que sabem se comunicar atravs do protocolo proprietrio do banco de dados. Esse conjunto de classes recebe o nome de driver. Todos os principais bancos de dados do mercado possuem drivers JDBC para que voc possa utiliz-los com Java.3

Implementao JDBC MySQL

DriverManager.getConnection("jdbc:mysql://localh ost/teste");

1

Java Database Connectivity ou JDBC um conjunto de classes e interfaces (API) escritas em Java que fazem o envio de instrues SQL para qualquer banco de dados relacional 2 O MySQL um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL (Linguagem de Consulta Estruturada, do ingls Structured Query Language) como interface 3 Application Programming Interface (ou Interface de Programao de Aplicaes) um conjunto de rotinas e padres estabelecidos por um software para a utilizao das suas funcionalidades por programas aplicativos que no querem envolver-se em detalhes da implementao do software, mas apenas usar seus servios.

Prof. Douglas O. Tybel

2

FBRICA DE CONEXESPara abrir uma conexo com um banco de dados, precisamos utilizar sempre um driver. A classe DriverManager a responsvel por se comunicar com todos os drivers que voc deixou disponvel. Para isso, invocamos o mtodo esttico getConnection com uma String que indica a qual banco desejamos nos conectar. Essa String - chamada de String de conexo JDBC - utilizada para acessar o MySQL, segue o padro abaixo: jdbc:mysql://ip/nome_do_banco Devemos substituir ip pelo IP do servidor e nome_do_banco pelo nome do banco de dados a ser utilizado, o restante mantem o padro. Seguindo o exemplo da linha acima e tudo que foi dito at agora, seria possvel rodar o exemplo abaixo e receber uma conexo para um banco MySQL chamado exemplo, caso ele esteja rodando na mesma mquina:public class JDBCExemplo { public static void main(String[] args) throws SQLException { Connection conexao = DriverManager.getConnection("jdbc:mysql://localhost/nome_banco","usuario","senha"); System.out.println("Conectado!"); conexao.close(); } }

Parmetos a serem preencidos no getConnection: jdbc:mysql://localhost/nome_banco1. 2. 3. 4. Devemos substituir localhost para o IP ou nome do servidor Devemos substituir nome_banco pelo nome do banco de dados Devemos substituir usuario pelo usurio de acesso ao banco de dados Devemos substituir senha pela senha do usurio de acesso ao banco de dados

Repare que estamos deixando passar a SQLException, que uma exception checked, lanada por muitos dos mtodos da API de JDBC. Em uma aplicao real devemos utilizar try/catch nos lugares que julgamos haver possibilidade de recuperar uma falha com o banco de dados. Tambm precisamos tomar sempre cuidado para fechar todas as conexes que foram abertas. Dica necessrio carregar o driver MySQL na biblioteca. Clique com boto direito nas bibliotecas >> Adicionar biblioteca, na lista escolha MySQL JDBC Driver.

Prof. Douglas O. Tybel

3

1. 2. 3.

4.

Abaixo segue exemplo de uma classe simples para conexo. Crie um banco de dados chamado banco, tenha em mos seu usuario e senha do MySQL; Para efetuar teste com esta classe, crie um novo projeto no NetBeans chamado Fabrica. Clique no menu Novo >> Novo Projeto, categoria Java e projetos Aplicativo a rea de trabalho Java. Crie uma nova classe no seu projeto chamada Conexao, para isso clique com boto direito do mouse no pacote principal escolha Novo >> Classe Java, ao solicitar o nome da classe digite Conexao, pressione Finalizar para concluir. (observe que a primeira letra maiscula). Copie os imports necessrios em destaque vermelho logo abaixo e cole na classe Conexao em baixo da linha: package Fabrica;

Imports necessarios para a classe de conexo:import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger;

Cdigo fonte da classe Conexao:1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. public Conexao () { } //Possibilita instancias public static Connection con = null; public static void Conectar() { System.out.println("Conectando ao banco..."); try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/banco","root",""); System.out.println("Conectado."); } catch (ClassNotFoundException ex) { System.out.println("Classe no encontrada, adicione o driver nas bibliotecas."); Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex); } catch(SQLException e) { System.out.println(e); throw new RuntimeException(e); }

16. } Observe que existem quatro parmetros para serem configurados na classe Conexao, eles so: IP, BANCO, USUARIO E SENHA.

Prof. Douglas O. Tybel

4

EXEMPLO DA CLASSE Conexaopackage Fabrica; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; public class Conexao { public Conexao () { } //Possibilita instancias public static Connection con = null; public static void Conectar() { System.out.println("Conectando ao banco..."); try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/banco","usuario","senha"); System.out.println("Conectado."); } catch (ClassNotFoundException ex) { System.out.println("Classe no encontrada, adicione o driver nas bibliotecas."); Logger.getLogger(Conexao.class.getName()).log(Level.SEVERE, null, ex); } catch(SQLException e) { System.out.println(e); throw new RuntimeException(e); } } }

PARA REALIZAR O TESTE COM SUA CLASSE DE CONEXO, FAA O SEGUINTE: 1. Crie um JFRAME e um boto no meio com o seguinte cdigo:4

Conexao.Conectar();Este mtodo Conectar() ser executado normalmente na abertura do frame, j instanciando a varivel con da classe Conexao com as informaes para conectar-se ao banco de dados. A partir deste momento a varivel con da classe Conexao est declarada contendo os dados de conexo. Para fechar a conexo necessrio usar: Conexao.con.close(); Repare que ao clicar no boto aparecer caso tudo ocorra bem, a seguinte sada: Conectando ao banco... Conectado.

4

No NetBeans clique com boto direito do mouse sobre o projeto, Novo >> Formulrio Jframe. Ao solicitar o nome do frame digite nome desejado.

Prof. Douglas O. Tybel

5

EXECUTAR COMANDO INSERT NO BANCO DE DADOSCom a conexo pronta, necessitamos declarar uma SQL para executarmos no banco de dados. Poderemos usar os comandos DML para modelar os dados no banco, como por exemplo: INSERT,UPDATE e DELETE bem como o famoso SELECT. As clusulas so executadas em um banco de dados atravs da interface PreparedStatement. Para receber um PreparedStatement relativo conexo, basta chamar o mtodo prepareStatement, passando como argumento o comando SQL com os valores vindos de variveis preenchidos com uma interrogao. 1. Crie uma tabela no banco de dados chamado banco que voc criou nos passos anteriores, chamada: contatos com os campos id : Integer(autoInc),nome : Varchar(80) e email : Varchar(80) Abaixo segue exemplo do comando para inserir diretamente no banco de dados sem uso de classe de entidade. Para efetuar teste com este comando, crie um novo projeto no NetBeans chamado Pagina5. Clique no menu Novo >> Novo Projeto, categoria Java e projetos Aplicativo a rea de trabalho Java. Crie um novo Jframe, para isso execute um clique com boto direito do mouse sobre o pacote pricipal Pagina5, Novo >> Formulrio Jframe. Ao solicitar o nome do frame digita JFPagina5. Adicione um boto (Button) no meio do frame, rotule-o como Inserir e adicione no evento 5 actionPerformed o cdigo abaixo:

2.

3. 4.

String sql = "insert into contatos (nome,email) values (?,?)"; java.sql.PreparedStatement stmt = Conexao.con.prepareStatement(sql);

Cada interrogao no comando insert acima um parametro que deve ser definido no PreparedStatement com setString para Strings setInt, setFloat e assim por diante, no nosso exemplo usaremos setString, pois os valores nome e email so deste tipo String. No substitua as interrogaes do comando insert acima por valores, as interrogaes sero substitudas por meio dos parmetros abaixo:

// preenche os valores dos parametros em sua respectiva ordem stmt.setString(1, "DOUGLAS"); stmt.setString(2, "[email protected]");

Por fim, uma chamada ao metodo execute() que serve para executar o comando SQL sem retornar dados, isso significa que seu uso ser geralmente para INSERT, UPDATE e DELETE.

stmt.execute();

Ser necessrio adicionar trecho para tratamento de erro por bloqueio com try-catch

5

Clique com boto direito do mouse sobre o componente escolha Eventos >> Action >> actionPerformed

Prof. Douglas O. Tybel

6

EXEMPLOVeja o exemplo abaixo, execuo de comando insert no banco considerando classe conexo explicada neste artigo. Crie um jFrame com um jButton, insira o cdigo abaixo no evento actionPerformed, conforme exemplo da pagina acima.// conectando Conexao.Conectar(); // cria um preparedStatement String sql = "insert into contatos (nome,email) values (?,?)"; java.sql.PreparedStatement stmt = Conexao.con.prepareStatement(sql); // preenche os valores stmt.setString(1, "DOUGLAS"); stmt.setString(2, "[email protected]"); // executa stmt.execute(); stmt.close(); System.out.println("Gravado!"); Conexao.con.close();

Ser necessrio adicionar trecho para tratamento de erro por bloqueio com try-catch. Deixe sempre uma linha sobrando ao final do cdigo antes de usar o assistente para usar o bloqueio, ser a linha que ele usar para colocar o catch.

Prof. Douglas O. Tybel

7

EXECUTANDO CONSULTA NO BANCO DE DADOSPara realizar consultas, tambm utilizamos a interface PreparedStatement, de forma que o mtodo executeQuery retorna todos os dados de uma determinada consulta. O objeto retornado do tipo ResultSet que permite navegar por seus registros atravs do mtodo next etc. Esse mtodo ir retornar false quando chegar ao fim da consulta, portanto normalmente utilizado para realizar um loop nos registros como no exemplo a seguir: // pega a conexo e o Statement Conexao.Conectar(); java.sql.PreparedStatement stmt = Conexao.con.prepareStatement("select * from contatos"); // executa um select ResultSet rs = stmt.executeQuery(); // rs a varivel que armazenou todo o resultado (ResultSet) while (rs.next()) { //Observe que o loop inicia aqui, enquanto o rs.next() for igual a true(conter resultado) System.out.println(rs.getString("nome") + " :: " + rs.getString("email")); } //O loop renova aqui rs.close(); stmt.close(); Conexao.con.close(); Exemplo da sada: DOUGLAS :: [email protected] Ser necessrio adicionar trecho para tratamento de erro por bloqueio com try-catch.

Como recuperar valores de um ResultSetEste trecho abaixo, explica a linha com fundo cinza acima dentro da estrutura de repetio while. Para retornar o valor de uma coluna no banco de dados basta chamar um dos mtodos get do ResultSet , dentre os quais, o mais comum: getString.

Segue passos para recuperar dados do ResultSet. Declarar uma varivel do tipo ResultSet para armazenar o resultado do banco Usar os metodos getString,getFloat,getInt e outros. ResultSet rs = stmt.executeQuery(); CampoTexto.setText( rs.getString(nome_do_campo_da_tabela_do_tipo_String) ); CampoInteiro.setText( rs.getInt(nome_do_campo_da_tabela_do_tipo_Inteiro) ); CampoFloat.setText( rs.getFloat(nome_do_campo_da_tabela_do_tipo_Real) ); Este cdigo no muito diferente de um cdigo em linguagem C, isto acontece porque a linguagem Java foi criada com base na linguagem C possuindo quase todas as palavras reservadas dela e um conceito que deixa muitos desenvolvedores descontentes: o case-sensitive. Isso mesmo, Java case-sensitive, portanto maisculas so diferentes de minsculas, a diferente de A.

Prof. Douglas O. Tybel

8

PRATICAR1. 2. 3. 4. 5. 6. 7. 8. Crie um banco de dados chamado contatos; Crie uma tabela chamada contatos (nome, email); 6 Crie um projeto chamado contatos; Crie uma classe para conexo no banco de dados chamada Conexao com referencia ao banco agenda com usurio e senha definido na instalao do MySQL; 7 Crie um JFrame chamado JFAgenda com um boto JButton rotulado como CADASTRAR; O comando deste boto ser uma insero conforme exemplo acima na pagina 06; Adicione um novo jButton no frame jFAgenda agora rotulado como CONSULTAR; O comando deste boto ser uma consulta conforme acima na pagina 07;

6

No NetBeans clique no menu Novo >> Novo Projeto, categoria Java e projetos Aplicativo a rea de trabalho Java.7

No NetBeans clique com boto direito do mouse sobre o projeto, Novo >> Formulrio Jframe. Ao solicitar o nome do frame digite nome desejado.

Prof. Douglas O. Tybel

9

ENTENDENDO COMPONENTE JTABLEA classe JTable utilizada para vizualizar dados em grid no Swing um dos componentes mais complexos desse pacote. Alias o JTable possui at um pacote especial, que contm diversas classes para 8 sua utilizao: javax.swing.table. A JTable um componente MVC : o seu trabalho dividido em 3 partes: Model: a parte que cuida dos dados, quem controla e distribui os dados na jtable. implementado pela interface TableModel ( AbstractTableModel e DefaultTableModel ). Ela responsavel por fornecedor os dados para a tabela, a qual requisitar os dados atraves do mtodo getValueAt, informando a linha e a coluna. Este mtodo retorna um Object, ou seja, um objeto qualquer, que pode ser um Integer, uma String ou outra classe que voc tenha implementado. Objerve o jFrame abaixo:

Componente jTable

Componente jButton

jTable1 1

O importante observar as colunas (Cdigo, Nome, Telefone), so estas colunas que usaremos como base para iniciar a populao de dados. Para reproduziar a tabela acima, clique com boto direito no JTable e selecione Contedo da tabela

8

Model-view-controller (MVC) um padro de arquitetura de software que visa a separar a lgica de negcio da lgica de apresentao, permitindo o desenvolvimento, teste e manuteno isolado de ambos.

Prof. Douglas O. Tybel

10

Vamos neste momento definir uma varivel para armazenar a estrutura atual da tabela: 1. 2. DefaultTableModel modelo = (DefaultTableModel) jTable1.getModel(); modelo.setNumRows(0); //Limpar as linhas

Onde modelo receber os dados conforme a figura 1. Para inserir uma linha sera preciso executar o mtodo addRow: modelo.addRow Segue abaixo como us-lo corretamente: 3. modelo.addRow(new Object[]{ 0001, Douglas, 2799379892

}); 4. jTable1.setModel(modelo);

Esse comando adicionar uma nova linha com o contedo acima na tabela. Prof. Douglas O. Tybel

11

EXEMPLO POPULAR JTABLE A PARTIR RESULTADO DE CONSULTA SQLCrie um jFrame com um Jbutton, adicione o contedo abaixo no evento actionPerformed do boto:// TODO add your handling code here: Conexao.Conectar(); java.sql.PreparedStatement stmtQuery = Conexao.con.prepareStatement("Select * from pessoas"); ResultSet resultSet = stmtQuery.executeQuery(); resultSet.beforeFirst(); DefaultTableModel modelo = (DefaultTableModel) jTable1.getModel();

modelo.setNumRows(0);while (resultSet.next()){ modelo.addRow(new Object[]{ resultSet.getString("codPessoa"), resultSet.getString("pessoa"), resultSet.getString("telefone") }); } jTable1.setModel(modelo);

Prof. Douglas O. Tybel

12

PRATICAR1. 2. 3. 4. 5. 6. Crie um banco de dados no MySql chamado CONTATOS; Crie uma tabela chamada pessoas, com a seguinte estrutura (codPessoa,pessoa,telefone); Adicione alguns dados fictcios; Crie um novo projeto chamado Pagina12; Crie uma classe chamada Conexao, conforme o contedo da pagina: 4; Observe os parametros do getConnection da classe Conexao, direcione para o banco de dados correto com o usurio e senha: DriverManager.getConnection("jdbc:mysql://127.0.0.1/nome_do_banco","root",""); Criar novo Formulrio jFrame chamado jFContato, conforme figura: jTable1 1 da pagina: 09, no ser necessrio os menus; O cdigo do boto Consultar deve: Conectar e popular o JTable, conforme exemplo na pagina: 11

7. 8.

Prof. Douglas O. Tybel

13

CADASTRO SIMPLES EM JAVA SEM USO DE CLASSECrie um formulrio jFrame chamado JFContato, conforme a figura abaixo:

Renomeie os campos conforme abaixo: Rtulo Cdigo Nome Telefone Cadastrar Nome codigojTextField pessoajTextField telefonejTextField cadastrarjButton

Insira o seguinte cdigo no evento actionPerformed do boto rotulado Cadastrar: try { // TODO add your handling code here: // conectando Conexao.Conectar(); // cria um preparedStatement String sql = "insert into pessoas (pessoa,telefone) values (?,?)"; PreparedStatement stmt = Conexao.con.prepareStatement(sql); // preenche os valores stmt.setString(1, pessoajTextField.getText()); stmt.setString(2, telefonejTextField.getText()); // executa stmt.execute(); stmt.close(); System.out.println("Gravado!"); Conexao.con.close(); } catch (SQLException ex) { Logger.getLogger(jFContato.class.getName()).log(Level.SEVERE, null, ex); }

Prof. Douglas O. Tybel

14

CRIAR CLASSE DE ENTIDADE JAVAPara realizarmos o cadastro acima, colocamos o cdigo DML diretamente no boto cadastrar, o que no permitido na programao orientada a objeto. Entendemos que o insert acima representa o mtodo Cadastrar contato, isto significa que um mtodo chamado setCadastar() da classe de contato. Para representarmos isso de forma correta devemos montar a classe: Contatos codPessoa pessoa telefone setCadastrar() setConsultar()

Logicamente existem outros mtodos na classe contatos, contudo focaremos na funo setCadastrar(); bem simples a lgica, pois divide em duas partes conforme abaixo: 1. 2. Criar a classe chamada Contatos Criar mtodo setCadastar() na classe Contatos

Para criar uma classe chamada Contatos, clique com boto direito no pacote da aplicao e escolha opo: Novo >> Classe Java O cdigo conforme abaixo ser gerado automaticamente: package desktopapplication1; 1. public class Contatos { //Implementar os atributos e mtodos }

Implemente os atributos na classe conforme abaixo, em destaque vermelho: 2. public class Contatos { private Integer codPessoa; private String pessoa; private String telefone; } No prximo passo precisamos criar os mtodos get e set publicos. Para realizar esta tarefa de forma automtica, clique no final da classe antes da chave } e pressione as teclas [ALT] e [INSERT] . Aparecer uma janela de opes conforme abaixo:

Prof. Douglas O. Tybel

15

Escolha Getter e setter, aparecer uma nova janela com as opes abaixo:

Marque todos os mtodos e clique no boto [Gerar]. Os mtodos pblicos sero gerados automaticamente na classe acima.

Prof. Douglas O. Tybel

16

CRIAR MTODO setCadastar()Para criarmos um mtodo que contenha os comandos para cadastrar um contato, necessrio observar trs pontos importantes: 1. 2. 3. Visibilidade Retorno Parametros

O primeiro ponto trata-se de visibilidade, pois no adinhanta criarmos um mtodo que os frames no posso acessar, deste modo a visibilidade do mtodo ser public, assim sua visibilidade ser publica para todo o projeto. O segundo ponto trata-se do retorno desejado aps execuo do comando. Normalmente para comandos de definio como o setCadastrar , setAlterar ou setExcluir, no existe retorno, pois apenas queremos alterar o contedo da tabela e no precisamos de retorno para mostrar para o usurio, deste modo o retorno correspondente a nulo ser void. O terceiro e ultimo ponto, trata-se de parmetros que possamos precisar para execuo o comando. Os parametros podem ser repassados atraves da prpria funo como exemplo abaixo: Declarao: setCadastar(int Codigo); Uso: setCadastrar( 2 ); Com este uso o nmero 2 estar disponvel dentro da classe e do mtodo setCadastrar na varivel Codigo. Por outro lado e at mais til, podemos usar os prprios atributos da classe como parmetros, pois eles j so visveis e acessveis de dentro do mtodo sem a necessidade de repass-los, apenas necessrio atribuir valor antes de executar o mtodo, como exemplo abaixo: //O cdigo abaixo ser usado no evento click do boto, no ser colocado na classe Contatos. Contatos oContato = new Contatos(); oContato.setCodPessoa( 2 ); oContato.setCadastrar(); A varivel codPessoa estar presente dentro da funo setCadastrar com o valor 2, assim podemos utiliz-lo para inserir em nosso comando. Veja exemplo da declarao do mtodo setCadastrar() que dever ser inserido na classe Contatos: 1. public void setCadastrar(){ //Comandos a serem executados }

Prof. Douglas O. Tybel

17

Usaremos ento o mesmo cdigo utilizado no boto cadastar, contudo faremos algumas alteraes: Insira o cdigo abaixo dentro do mtodo setCadastrar que voc acabou de criar acima, na classe Contatos: 2. String sql = "insert into pessoas (pessoa,telefone) values (?,?)"; PreparedStatement stmt = Conexao.con.prepareStatement(sql); // preenche os valores stmt.setString(1, pessoajTextField.getText()); stmt.setString(2, telefonejTextField.getText()); // executa stmt.execute(); stmt.close(); System.out.println("Gravado!"); Conexao.con.close();

Lembre-se de importar a biblioteca java.sql.PreparedStatement.

Use o bloquei para casos de erro no trecho desenvolvido acima.

Observe que duas linhas ainda constam erros, pois no existe os componentes pessoajTextField e telefonejTextField na classe Contatos para pegar os valores, assim os mesmos devem ser passados para classe antes mesmo da execuo deste mtodo, como no exemplo a seguir: //Cdigo do evento actionPerformed do boto cadastrar, no dever haver mais nenhum outro cdigo alm deste abaixo: Contatos oContato = new Contatos(); oContato.setPessoa( DOUGLAS ); oContato.setTelefone( 2799379892 ); oContato.setCadastrar();

Devemos alterar as linhas erradas pelos prprios mtodos, j que os valores foram atribudos antes da execuo do mtodo.

Prof. Douglas O. Tybel

18

Aps alterao o trecho ser alterado conforme acima. Segue abaixo contedo do mtodo setCadastrar: try { // cria um preparedStatement String sql = "insert into pessoas (pessoa,telefone) values (?,?)"; PreparedStatement stmt = Conexao.con.prepareStatement(sql); // preenche os valores stmt.setString(1, getPessoa() ); stmt.setString(2, getTelefone() ); // executa stmt.execute(); stmt.close(); System.out.println("Gravado!"); Conexao.con.close(); } catch (SQLException ex) { Logger.getLogger(Contatos.class.getName()).log(Level.SEVERE, null, ex); }

Prof. Douglas O. Tybel

19

EXEMPLO DA CLASSE CONTATOSpackage Pagina20; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; public class Contatos { private Integer codPessoa; private String pessoa; private String telefone; public Integer getCodPessoa() { return codPessoa; } public void setCodPessoa(Integer codPessoa) { this.codPessoa = codPessoa; } public String getPessoa() { return pessoa; } public void setPessoa(String pessoa) { this.pessoa = pessoa; } public String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; } public void setCadastrar(){ try { // cria um preparedStatement String sql = "insert into pessoas (pessoa,telefone) values (?,?)"; PreparedStatement stmt = Conexao.con.prepareStatement(sql); // preenche os valores stmt.setString(1, getPessoa() ); stmt.setString(2, getTelefone() ); // executa stmt.execute(); stmt.close(); System.out.println("Gravado!"); Conexao.con.close(); } catch (SQLException ex) { Logger.getLogger(Contatos.class.getName()).log(Level.SEVERE, null, ex); } } } Prof. Douglas O. Tybel

20

Cdigo do boto Cadastrar usando as tcnicas de orientao a objetoO cdigo do boto cadastrar usando as tcnicas OO , ser sempre mais curto, pois todo o cdigo estar na classe, assim em todo o projeto, toda vez que fizer necessrio o uso do cadastro de contato, no ser necessrio digitar todo o cdigo e sim o mtodo chamado a partir da classe Contatos, conforme abaixo: Conexao.Conectar(); Contatos oContato = new Contatos(); oContato.setPessoa( pessoajTextField.getText() ); oContato.setTelefone( telefonejTextField.getText() ); oContato.setCadastrar(); Obs.: No h necessidade de uma conexo toda vez que for executar um mtodo, basta conectar na abertura do frame por exemplo.9

9

A orientao a objetos um paradigma de anlise, projeto e programao de sistemas de software baseado na composio e interao entre diversas unidades de software chamadas de objetos. Em alguns contextos, prefere-se usar modelagem orientada ao objeto, em vez de programao. De fato, o paradigma "orientao a objeto", tem bases conceituais e origem no campo de estudo da cognio, que influenciou a rea de inteligncia artificial e da lingustica, no campo da abstrao de conceitos do mundo real

Prof. Douglas O. Tybel

21

PRATICAR1. 2. 3. 4. 5. 6. Em sua aplicao chamada Pagina20; Contendo uma classe chamada Conexao, conforme o contedo da pagina: 4; Criar novo Formulrio jFrame chamado jFContatoOO, conforme pagina: 13; Crie uma classe para entidade Contatos; Crie na classe Contatos o mtodo setCadastar() com os cdigos conforme pagina: 18 O cdigo do boto Cadastar, deve: Conectar e executar o mtodo setCadastar() da classe Contatos, conforme exemplo na pagina: 20

Prof. Douglas O. Tybel

22

Criar mtodo getConsultar() com retorno do tipo ResultSetPara criarmos um mtodo que contenha os comandos para consultar um contato, necessrio observar trs pontos simples: 1. 2. 3. Visibilidade Retorno Parametros

O primeiro ponto trata-se de visibilidade, pois no adinhanta criarmos um mtodo que os frames no posso acessar, deste modo a visibilidade do mtodo ser public, pois sua visibilidade ser publica para todo o projeto. O segundo ponto trata-se do retorno desejado aps execuo do comando. Normalmente para comandos de consulta como o getConsultar, getEmitir ou getID, existem retornos de diversos tipos, mas normalmente gostariamos de tratar todo o retorno em forma de tabela. O retorno que representar a tabela em sua igualdade ser o tipo ResultSet. O terceiro e ultimo ponto trata-se de parmetros que possamos precisar para execuo do comando. Os parametros podem ser repassados atraves da prpria funo no caso da consulta no ser necessrio. Conforme j visto no mtodo setCadastrar, a nica diferena que o retorno da funo no nulo ou void por assim dizer, observe abaixo a declarao do mtodo: public ResultSet getConsultar(){ //Cdigo para consultar }

Ser necessrio importar a seguinte classe: java.sql.ResultSet, conforme imagem acima. Substituir //Cdigo para consultar, pelo seguinte cdigo abaixo: String comandoSQL = "Select * from pessoas "; if ( getCodPessoa() > 0 ){ comandoSQL += " where codPessoa = ?"; } java.sql.PreparedStatement stmtQuery = Conexao.con.prepareStatement(comandoSQL); if ( getCodPessoa() > 0 ){ stmtQuery.setInt(1, getCodPessoa()); } ResultSet resultSet = stmtQuery.executeQuery(); resultSet.beforeFirst(); return resultSet; A linha em destaque amarela acima, refere ao retorno da funo com a varivel resultSet declarada para armazanar o resultado do banco de dados. Prof. Douglas O. Tybel

23

Obs.: Lembre-se de deixar o tratamento de exceo com uma throws chamada SQLException, conforme a figura abaixo:

Segue abaixo cdigo completo aps criao: public ResultSet getConsultar() throws SQLException{ String comandoSQL = "Select * from pessoas "; if ( getCodPessoa() > 0 ){ comandoSQL += " where codPessoa = ?"; } java.sql.PreparedStatement stmtQuery = Conexao.con.prepareStatement(comandoSQL); if ( getCodPessoa() > 0 ){ stmtQuery.setInt(1, getCodPessoa()); } ResultSet resultSet = stmtQuery.executeQuery(); resultSet.beforeFirst(); return resultSet; }

Cdigo usado no boto consultar com tcnicas orientao a objetostry { // TODO add your handling code here: Conexao.Conectar(); Contatos oContato = new Contatos(); ResultSet resultSet = oContato.getConsultar(); DefaultTableModel modelo = (DefaultTableModel) jTable1.getModel(); modelo.setNumRows(0); while (resultSet.next()) { modelo.addRow(new Object[]{resultSet.getString("codPessoa"), resultSet.getString("pessoa"), resultSet.getString("telefone")}); } jTable1.setModel(modelo); } catch (SQLException ex) { Logger.getLogger(DesktopApplication1View.class.getName()).log(Level.SEVERE, null, ex); }

Prof. Douglas O. Tybel

24

PRATICAR1. 2. 3. 4. 5. 6. 7. 8. Crie uma aplicao chamada Servicos; Use a classe Conexao j existente (altere apenas os dados de conexo); Crie um banco de dados chamado Servicos; Crie uma tabela chamada Servicos (id,servico,descricao), id sendo autoInc; Crie a classe de entidade Servicos no projeto corrente, conforme exemplos ensinados; Crie os mtodos de consulta e cadastro na classe de Servicos conforme exemplos; Crie um frame para cadastrar os Servios e outro frame para consultar os servios, quem quiser pode fazer em um jFrame apenas se achar mais simples. Desenvolva os cdigos dos botes chamando os mtodos da classe Servio para cadastrar e consultar, conforme exemplos a partir da pagina: 20

Prof. Douglas O. Tybel

25

RECUPERAR DADOS DO JTABLEPara recuperar os dados de um jTable e preencher os campos do formulrio necessrio seguir a lgica abaixo: 1. 2. 3. 4. A primeira coluna do jTable deve ser o cdigo do item desejado; Pegar o cdigo da primeira coluna quando o usurio clicar em cima do registro e armazenar em uma varivel do tipo int; Com o cdigo do item devemos efetuar uma consulta no banco de dados; Usar o resultado e preencher os campos do formulrio;

Observe abaixo o que deve acontecer:

1.

2.

3.

Vamos considerar a classe Contatos j criada anteriormente nos exerccios acima, conforme grade abaixo. Contatos codPessoa pessoa telefone setCadastrar() setConsultar() Criaremos um novo projeto chamado Pagina25, crie um novo jFrame chamado JFRecuperar. Este formulrio ser desenhado conforme figura acima, o boto consultar deve popular a grade conforme exemplo acima das paginas anteriores usando a orientao a objetos. O que devemos saber no momento que o clique no registro dever preencher os campos do formulrio.

Prof. Douglas O. Tybel

26

Desenvolver o cdigo para recuperar os dados do jTablePara realizar esta tarefa, siga os passos abaixo: 1. Use o nome dos componentes conforme grade abaixo: Nome codigojTextField pessoajTextField telefonejTextField consultarjButton1

Rtulo Cdigo Nome Telefone Consultar

2.

Entre no evento mouseClicked (clique do mouse na grade) do jTable1, conforme imagem abaixo:

3.

Insira o cdigo abaixo: int codPessoa = Integer.parseInt(jTable1.getValueAt(jTable1.getSelectedRow(), 0).toString()); Contatos oContato = new Contatos(); oContato.setCodPessoa(codPessoa); //Filtrar pelo cdigo java.sql.ResultSet rs = oContato.getConsultar(); rs.first(); codPessoajTextField.setText( rs.getString("codPessoa") ); pessoajTextField.setText( rs.getString("pessoa") ); telefonejTextField.setText( rs.getString("telefone") );

4.

Ser necessrio bloquear o trecho com try-catch, conforme imagem abaixo:

Prof. Douglas O. Tybel

27

CONCLUSONesta apostila conferimos como efetuar uma conexo entre o Java e o banco de dados MySQL. Vimos tambm como representar uma classe e objeto em Java de uma tabela do banco de dados, tudo isso usando o paradigma da orientao a objetos. Construindo comandos SQL nos mtodos das classes, aliado ao IDE de desenvolvimento do NetBeans, desenvolvemos telas capazes de manipular os dados armazenados no banco de dados. importante ressaltar a importncia do uso deste paradigma POO (Programao Orientada a Objetos), veja que ao aprender Java, voc tambm est aprendendo diversas linguagens associadas ao POO, sendo capaz de programar em: C, C++, C#,PHP e o mais diferente entre esses o Pascal(IDE do CodeGear Delphi). Imagine aprender uma linguagem e levar este pacote inteiro! No seria uma maravilha? Isso real, um programador Java consegue aprender estas outras linguagens em menos de duas semanas.

Prof. Douglas O. Tybel