Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
facape.br/jocelio/p3//atualiza.html
1/13
03/08/2011
figura 5.1
A classe CadastroCliente.java contem os botes principais para executar incluso, alterao, excluso, procurar e
listar dados a partir do banco de dados. Est listada abaixo.
1 // Inserting into, updating and searching through a database
2 import java.sql.*;
3 import java.awt.*;
4 import java.awt.event.*;
5 import javax.swing.*;
6
7 public class CadastroCliente extends JFrame {
8 private ControlPanel controls;
9 private ScrollingPanel scrollArea;
10 private JTextArea output;
11 private String url;
12 private String username ;
13 private String password ;
14 private Connection connect;
15 private JScrollPane textpane;
16
17 public CadastroCliente()
18 {
19 super( "Aplicacao Banco de Dados - Cadastro de Clientes" );
20
21 Container c = getContentPane();
22
23 // Start screen layout
24 scrollArea = new ScrollingPanel();
25 output = new JTextArea( 6, 30 );
26 c.setLayout( new BorderLayout() );
27 c.add( new JScrollPane( scrollArea ),
28 BorderLayout.CENTER );
29 textpane = new JScrollPane( output );
30 c.add( textpane, BorderLayout.SOUTH );
31
32 // Set up database connection
33 try {
34 url = "jdbc:odbc:Empresa";
35 username = "anonimo";
36 password = "convidado";
37
38 Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
39 connect = DriverManager.getConnection( url, username, password );
40 output.append( "Conectado com sucesso\n" );
41 }
42 catch ( ClassNotFoundException cnfex ) {
43 // process ClassNotFoundExceptions here
44 cnfex.printStackTrace();
45 output.append( "Conexao nao efetivada\n" +
facape.br/jocelio/p3//atualiza.html
2/13
03/08/2011
46 cnfex.toString() );
47 }
48 catch ( SQLException sqlex ) {
49 // process SQLExceptions here
50 sqlex.printStackTrace();
51 output.append( "Conexao nao efetivada\n" +
52 sqlex.toString() );
53 }
54 catch ( Exception ex ) {
55 // process remaining Exceptions here
56 ex.printStackTrace();
57 output.append( ex.toString() );
58 }
59
60 // Complete screen layout
61 controls =
62 new ControlPanel( connect, scrollArea, output);
63 c.add( controls, BorderLayout.NORTH );
64
65 setSize( 700, 500 );
66 show();
67 }
68
69
70 }
Esta classe CadastroCliente (definida na linha 7) utiliza um objeto ControlPanel e um objeto ScrollingPanel para
a GUI do programa. A linha 39 estabelece a conexo com o banco de dados. Classes separadas so definidas pra
tratar eventos de cada um dos 7 botes na interface com o usurio.
A classe AdicionandoRegistro.java est listada abaixo.
1 // Class AddRecord definition
2 import java.awt.*;
3 import java.awt.event.*;
4 import java.sql.*;
5 import javax.swing.*;
6
7 public class AdicionandoRegistro implements ActionListener {
8 private ScrollingPanel fields;
9 private JTextArea output;
10 private Connection connection;
11
12 public AdicionandoRegistro( Connection c, ScrollingPanel f,
13 JTextArea o )
14 {
15 connection = c;
16 fields = f;
17 output = o;
18 }
19
20 public void actionPerformed( ActionEvent e )
facape.br/jocelio/p3//atualiza.html
3/13
03/08/2011
21 {
22 try {
23 Statement statement = connection.createStatement();
24
25 if (( !fields.clcdesc.getText().equals( "" ) ) &&
26 !fields.clyrend.getText().equals( "" ) ){
27 String query = "INSERT INTO TBcliente (" +
28 "clcdesc, clyrend" +
29 ") VALUES ('" +
30 fields.clcdesc.getText() + "', '" +
31 fields.clyrend.getText() + "')";
32 output.append( "\nEnviando query: " +
33 connection.nativeSQL( query )
34 + "\n" );
35 int result = statement.executeUpdate( query );
36
37 if ( result == 1 )
38 output.append( "\nRegistro Adicionado com Sucesso\n" );
39 else {
40 output.append( "\nFalha na incluso\n" );
41 fields.clcdesc.setText( "" );
42 fields.clyrend.setText( "" );
43 }
44 }
45 else
46 output.append( "\nEntre com a descricao e a renda\n" );
47
48 statement.close();
49 }
50 catch ( SQLException sqlex ) {
51 sqlex.printStackTrace();
52 output.append( sqlex.toString() );
53 }
54 }
55 }
Esta classe AdicionandoRegistro acionada ao pressionar o boto Adicionar. O contrutor
AdicionandoRegistro recebe os 3 argumentos - uma Connection, um ScrollingPanel e uma JTextArea. Este
ltimo serve para sada de mensagens exibidas pelo programa. A linha 23 no mtodo actionPerformed cria um
objeto Statement para manipular o banco de dados. A linha 25 e 26 testam se existem dados nos campos de
texto de descrio e renda. Se esses campos de texto no contiverem dados, nenhum registro ser adicionado ao
banco de dados. As linhas 27 a 31 constroem o string de SQL INSERT INTO que ser utilizado para adicionar
um registro ao banco de dados. A linha 35
35 int result = statement.executeUpdate( query );
utiliza o mtodo statement.executeUpdate para atualizar o banco de dados com o novo registro. O mtodo
retorna um int indicando o sucesso ou fracasso da operao de atualizao que testado na linha 37. Se a
atualizao for malsucedida, todos os campos de texto sero limpos. O esquema de execuo de query para
inserir registro o mesmo utilizado para atualizar e excluir, descrito respectivamente nas classes
AtualizandoRegistro (linhas 23 a 44) e ExcluindoRegistro (linhas 22 a 39).
A classe AtualizandoRegistro.java est listada abaixo.
facape.br/jocelio/p3//atualiza.html
4/13
03/08/2011
5/13
03/08/2011
6/13
03/08/2011
43 }
44 catch ( SQLException sqlex ) {
45 sqlex.printStackTrace();
46 output.append( sqlex.toString() );
47 }
48 }
49
50 // Display results of query. If rs is null
51 }
A classe ProcurandoRegistro.java est listada abaixo.
1 // Class FindRecord defintion
2 import java.awt.*;
3 import java.awt.event.*;
4 import java.sql.*;
5 import javax.swing.*;
6
7 public class ProcurandoRegistro implements ActionListener {
8 private ScrollingPanel fields;
9 private JTextArea output;
10 private Connection connection;
11
12 public ProcurandoRegistro( Connection c, ScrollingPanel f,
13 JTextArea o )
14 {
15 connection = c;
16 fields = f;
17 output = o;
18 }
19
20 public void actionPerformed( ActionEvent e )
21 {
22 try {
23 if ( !fields.clcdesc.getText().equals( "" ) ) {
24 Statement statement =connection.createStatement();
25 String query = "SELECT * FROM TBcliente " +
26 "WHERE clcdesc like '" +
27 fields.clcdesc.getText() + "'";
28 output.append( "\nEnviando query : " +
29 connection.nativeSQL( query )
30 + "\n" );
31 ResultSet rs = statement.executeQuery( query );
32 display( rs );
33 output.append( "\nQuery bem sucedida\n" );
34 statement.close();
35 }
36 else
37 fields.clcdesc.setText(
38 "Entre com a descricao e precione Procurar" );
39 }
facape.br/jocelio/p3//atualiza.html
7/13
03/08/2011
8/13
03/08/2011
9/13
03/08/2011
60 output.append ("\n");
61 for ( int i = 1; i <= rsmd.getColumnCount(); ++i ) // Quantidade de Colunas (campos)
62 output.append (rsmd.getColumnName( i ) + "\t"); // Nome da coluna
63
64 // get row data
65 do {
66 output.append ("\n" + getNextRow( rs, rsmd ) ); // Formata a cada registro
67 } while ( rs.next() );
68
69 }
70 catch ( SQLException sqlex ) {
71 sqlex.printStackTrace();
72 }
73 }
74
75 private String getNextRow( ResultSet rs,
76 ResultSetMetaData rsmd )
77 throws SQLException
78 {
79 String currentRow = "";
80
81 for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
82 switch( rsmd.getColumnType( i ) ) { // Tipo da coluna (campo)
83 case Types.VARCHAR: // pacote java.sql
84 currentRow += rs.getString( i ) + "\t"; // Obtem o dado String
85 break;
86 case Types.INTEGER:
87 currentRow += new Long( rs.getLong( i ) ) + "\t";// Obtem o dado 88 Long
89 break;
90 default:
91 currentRow += ( "Tipo : " +
92 rsmd.getColumnTypeName( i ) + "\t" );
93 }
94
95 return currentRow;
96 }
97 }
Esta classe ListarCliente j foi discutida do tpico Consultando dados. uma adaptao da classe
MostrarTabela para exibir os dados no JTextArea.
A classe Help.java esta listada abaixo.
1 // Class Help definition
2 import java.awt.*;
3 import java.awt.event.*;
4 import javax.swing.*;
5
6 public class Help implements ActionListener {
7 private JTextArea output;
8
9 public Help( JTextArea o )
facape.br/jocelio/p3//atualiza.html
10/13
03/08/2011
10 {
11 output = o;
12 }
13
14 public void actionPerformed( ActionEvent e )
15 {
16 output.append( "\nClique Procurar para localicar um registro.\n" +
17 "Clique Adicionar para inserir um novo registro.\n" +
18 "Clique Atualizar para atualizar " +
19 "a informacao em um registro.\n" +
20 "Clique Limpar para limprar" +
21 " os campos.\n" +
22 "Clique em Excluir para eliminar um registro.\n" +
23 "Clique em Listar para os registro.\n");
24 }
25 }
Esta classe Help exibe instrues sobre como utilizar o programa na janela de console na parte inferior da tela
(JTextArea)..
A classe ControlPanel.java esta listada abaixo.
1 // Class ControlPanel definition
2 import java.awt.*;
3 import java.awt.event.*;
4 import java.sql.*;
5 import javax.swing.*;
6
7 public class ControlPanel extends JPanel {
8 private JButton findName, addName,
9 updateName, clear, excluir, listar, help;
10
11 public ControlPanel( Connection c, ScrollingPanel s,
12 JTextArea t )
13 {
14 setLayout( new GridLayout( 1, 5 ) );
15
16 findName = new JButton( "Procurar" );
17 findName.addActionListener( new ProcurandoRegistro( c, s, t ) );
18 add( findName );
19
20 addName = new JButton( "Adicionar" );
21 addName.addActionListener( new AdicionandoRegistro( c, s, t ) );
22 add( addName );
23
24 updateName = new JButton( "Atualizar" );
25 updateName.addActionListener(
26 new AtualizandoRegistro( c, s, t ) );
27 add( updateName );
28
29 clear = new JButton( "Limpar" );
30 clear.addActionListener( new ClearFields( s ) );
facape.br/jocelio/p3//atualiza.html
11/13
03/08/2011
31 add( clear );
32
33 excluir = new JButton( "Excluir" );
34 excluir.addActionListener( new ExcluindoRegistro( c, s, t ) );
35 add( excluir );
36
37 listar = new JButton( "Listar" );
38 listar.addActionListener( new ListarCliente( c,s,t ) );
39 add( listar );
40
41 help = new JButton( "Ajuda" );
42 help.addActionListener( new Help( t ) );
43 add( help );
44 }
45 }
A classe ScrollingPanel.java esta listada abaixo.
1 // Class ScrollingPanel
2 import java.awt.*;
3 import java.awt.event.*;
4 import javax.swing.*;
5
6 public class ScrollingPanel extends JPanel {
7 private JPanel labelPanel, fieldsPanel;
8 private String labels[] =
9 { "Codigo :", "Descricao:", "Renda:"};
10 JTextField clncodg, clcdesc, clyrend;// package access
11
12 public ScrollingPanel()
13 {
14 // Label panel
15 labelPanel = new JPanel();
16 labelPanel.setLayout(
17 new GridLayout( labels.length, 1 ) );
18
19 ImageIcon ii = new ImageIcon( "images/icon.jpg" );
20
21 for ( int i = 0; i < labels.length; i++ )
22 labelPanel.add( new JLabel( labels[ i ], ii, 0) );
23
24 // TextField panel
25 fieldsPanel = new JPanel();
26 fieldsPanel.setLayout(
27 new GridLayout( labels.length, 1 ) );
28 clncodg = new JTextField( 20 );
29 clncodg.setEditable( false );
30 fieldsPanel.add( clncodg );
31 clcdesc = new JTextField( 20 );
32 fieldsPanel.add( clcdesc );
33 clyrend = new JTextField( 20 );
facape.br/jocelio/p3//atualiza.html
12/13
03/08/2011
34 fieldsPanel.add( clyrend);
35
36 setLayout( new GridLayout( 1, 2 ) );
37 add( labelPanel );
38 add( fieldsPanel );
39 }
40 }
A classe ClearFields.java est listada abaixo.
1 // Class ClearFields definition
2 import java.awt.*;
3 import java.awt.event.*;
4
5 public class ClearFields implements ActionListener {
6 private ScrollingPanel fields;
7
8 public ClearFields( ScrollingPanel f )
9{
10 fields = f;
11 }
12
13 public void actionPerformed( ActionEvent e )
14 {
15 fields.clncodg.setText( "" );
16 fields.clcdesc.setText( "" );
17 fields.clyrend.setText( "" );
18 }
19 }
Esta classe ClearFields responsvel por limpar os campos de texto em resposta ao boto Limpar na GUI.
facape.br/jocelio/p3//atualiza.html
13/13