A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Ronaldo Celso Messias Correia

Apresentações semelhantes


Apresentação em tema: "Ronaldo Celso Messias Correia"— Transcrição da apresentação:

1 Ronaldo Celso Messias Correia
Conexão com Bancos de Dados via JDBC Ronaldo Celso Messias Correia

2 Conexão com Bancos de Dados via JDBC
JDBC (Java Database Connectivity) é uma API para execução e manipulação de resultados a consultas SQL através de Java. A conexão com o banco de dados vai JDBC utiliza um arquivo .jar que constitui o elo de ligação da aplicação com o SGBD utilizado. Ele deve ser incluído nas Opções do Projeto. Para desenvolver uma aplicação com Java e bancos de dados relacionais, é preciso ter disponível: O pacote JDBC (padrão na distribuição da plataforma de desenvolvimento Java desde sua versão 1.1); Acesso a um servidor de banco de dados relacional, ou seja, um sistema gerenciador de banco de dados que entende SQL (MySQL); Um driver JDBC adequado ao SGBD que será utilizado. mysql-connector-java bin.jar

3 Conexão JDBC: Biblioteca SQL Objeto para a Conexão
import java.sql.*; ... Connection connect; Statement stmt; try { String url = "jdbc:mysql://" + host + "/" + banco_dados + "?user=" + login + "&password=" + password; Class.forName("com.mysql.jdbc.Driver"); connect = DriverManager.getConnection(url); stmt = connect.createStatement();} catch ( ClassNotFoundException cnfex ) {System.err.println("Falha ao ler o driver JDBC/ODBC");} catch ( SQLException sqlex ) {System.out.println("Impossível conectar");} catch ( Exception ex ) {System.out.println(“Outro erro");.} Objeto para a Conexão Objeto para comandos SQL Caminho de conexão Carrega o Driver Efetua a conexão Cria objeto stmt para comandos SQL Três tipos possíveis de erro

4 Método Conecta public void conecta() { try
String url = "jdbc:mysql://" + host + "/" + banco_dados + "?user=" + login + "&password=" + password; Class.forName("com.mysql.jdbc.Driver"); connect = DriverManager.getConnection(url); stmt = connect.createStatement(); } catch (ClassNotFoundException ex1) System.out.println ("Erro de classe não existente: "+ex1.getMessage().toString()+"\n"); catch (SQLException ex) System.out.println ("Erro de SQL: "+ex.getMessage().toString()+"\n"); catch (Exception e) System.out.println ("Outros Erros: "+e.getMessage().toString()+"\n"); System.out.println ("Conectado");

5 Método desconecta /* Faz uma desconexão com o banco de dados */
public void desconecta () { try stmt.close (); connect.close (); } catch (Exception e) System.out.println ("Error:"+e.getMessage().toString()+"\n");

6 Classe Conexão public class Conexao {
public static Connection connect; public static Statement stmt; String host=" "; String banco_dados="teste"; String login="root"; String password = "sql"; String porta="3306"; public Conexao(String host, String banco_dados, String login, String password) this.host=host; this.banco_dados=banco_dados; this.login = login; this.password = password; }

7 Insert / Update / Delete:
import java.sql.*; ... private Connection connect; try { Statement statement = connect.createStatement(); String query = "UPDATE pessoa SET nome = ‘Joaquim’ “+ “ WHERE id = 1”; int result = statement.executeUpdate( query ); statement.close(); } catch ( SQLException sqlex ) {...} Cria o objeto para executar um comando SQL Monta o SQL Executa o SQL retornando o número de registros afetados Finaliza o objeto que executou o SQL Erro de SQL

8 Select: import java.sql.*; ... private Connection connect; … try {
Statement statement = connect.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); String query = “SELECT * FROM addresses”; ResultSet rs = statement.executeQuery( query ); statement.close(); } catch ( SQLException sqlex ) {...} Cria o objeto para executar um comando SQL Opcional Monta SQL Executa o SQL retornando um conjunto de dados Finaliza o objeto que executou o SQL Erro de SQL

9 Utilizando os dados retornados:
Posicionamento de registros: ResultSet rs; rs.first(); rs.last(); rs.next(); rs.previous(); Escolhendo um campo: Int Codigo = rs. getInt( “ID” ); String Nome = rs. getString( “Nome” ); Date Nascimento = rs. getDate( “DtNasc” ); Exemplo:String info; while(rs.next()) { info=rs.getString(“sobrenome"); System.out.println(info); }

10 Recupera os campos de uma tabela ou query
Utilizando os dados retornados: Recuperando os campos de uma tabela ResultSet rs; ... ResultSetMetaData rsm = rs.getMetaData(); for( int i=1;i<=rsm.getColumnCount(); i++) System.out.println(rsm.getColumnName(i)); getColumnTypeName – retorna o tipo do dado;  java.sql.Types for (int i=1; i<=rsmd.getColumnCount(); i++) { info=rsmd.getColumnTypeName(i); info2=rsmd.getColumnName(i); System.out.println(info2 + " --> " + info + "\n"); } Recupera os campos de uma tabela ou query Número de campos Os campos Retorna o tipo

11 SQL: Proprietário Veículo
cod nome cpf 1 Jose Anibal 2 Cleide Alvares 3 Celina Dilon cod codp modelo valor 1 Fusca 1600 1320,00 2 Brasilia 1200,00 3 Gordine II 4500,00 SQL: SELECT modelo FROM Veiculo WHERE valor > 2000; SELECT * FROM Proprietario WHERE name LIKE ‘Jose%’; SELECT v.* FROM Proprietario p, veiculo v WHERE p.cod=v.codp; INSERT INTO Veiculo VALUES(5,3,’DKW’, ); UPDATE veiculo SET valor=valor*1.1 WHERE modelo=“Fusca 1600";

12 Inserindo um novo Registro (Tabela Pessoa)
//inserção usando um statement Statement statement = connect.createStatement(); String query = "INSERT INTO pessoa (nome,endereco,cidade,estado) VALUES ('José de Alencar','Av. Copacabana, 222', 'Rio de Janeiro', 'RJ')"; boolean res = statement.execute(query);

13 Alterando um Registro (Tabela Pessoa)
//alteração usando um statement Statement statement = connect.createStatement(); String query = "UPDATE pessoa SET nome = 'Clara Nunes' WHERE id = 5"; int res = statement.executeUpdate(query);

14 Exemplo com JTable import java.sql.*; import javax.swing.*;
import java.awt.event.*; import java.awt.*; import java.util.*; //por causa do Vector import acessamysl.Conexao; public class TesteTable extends JFrame { private JTable table; public static Connection connect; public static Statement stmt; String host=" "; String banco_dados="teste"; String login="root"; String password = "sql"; String porta="3306"; public TesteTable() //construtor Conexao c = new Conexao(" ", "teste", "root","sql"); c.conecta(); connect = c.getConection(); System.out.println ("Conectado"); getTable(); setSize(400,200); show() }

15 Exemplo com JTable private void getTable(){ Statement st;
ResultSet rs; try{ String query = "SELECT * FROM pessoa"; st = connect.createStatement(); rs = st.executeQuery(query); mostraResultado(rs); st.close(); }catch(SQLException sqlex){ sqlex.printStackTrace(); }

16 Exemplo com JTable private void mostraResultado(ResultSet rs) throws SQLException { boolean verificaDados = rs.next(); if (!verificaDados){ JOptionPane.showMessageDialog(null, "Nenhum registro!"); setTitle("Nenhum registro!!!"); return; } setTitle("Pessoas cadastradas!!!"); Vector cabecalho = new Vector(); Vector tuplas = new Vector(); try { ResultSetMetaData rsmd = rs.getMetaData(); for (int i = 1; i<=rsmd.getColumnCount(); i++) cabecalho.addElement(rsmd.getColumnName(i)); do{ tuplas.addElement(getTupla(rs,rsmd)); }while(rs.next()); table = new JTable(tuplas, cabecalho); JScrollPane scroll = new JScrollPane(table); getContentPane().add(scroll, BorderLayout.CENTER); validate(); //Atualiza desenho da tela }catch(SQLException sqlex){ sqlex.printStackTrace(); }

17 Exemplo com JTable private Vector getTupla(ResultSet rs, ResultSetMetaData rsmd) throws SQLException{ Vector tupla = new Vector(); for (int i=1; i<=rsmd.getColumnCount(); i++) { switch(rsmd.getColumnType(i)){ case Types.VARCHAR: tupla.addElement(rs.getString(i)); break; case Types.INTEGER: tupla.addElement(new Long(rs.getLong(i))); case Types.SMALLINT: case Types.CHAR: default: System.out.println("O Tipo era: " + rsmd.getColumnTypeName(i)); } return tupla;

18 Exemplo com JTable public void shutDown() { try{ connect.close();
}catch(SQLException sqlex){ System.err.println("Não foi possível desconectar!!!"); sqlex.printStackTrace(); } public static void main(String[] args){ final TesteTable app = new TesteTable(); app.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e){ app.shutDown(); System.exit(0); });

19 Exercício Criar um novo projeto
Separar o sistema em três camadas básicas: interface, estrutura e persistência; Dividir o desenvolvimento do software em fases, cada fase tratando uma parte da aplicação. O fim de uma fase constitui na entrada da outra fase; Em Projeto/Propriedades – Libraries, inclua o conector JBDC Criar uma classe Pessoa (pacote estrutura) public class Pessoa { /* Atributos de Pessoa */ private String nome; private short idade; private char sexo; private String dataInscricao; private boolean moraSozinho; private String UF; Criar a interface de cadastro de Pessoa (pacote interface)

20 Exercício Criar as tabelas no banco de dados - MySQL
create table estado ( nome varchar(2) not null primary key ); create table pessoa nome varchar(50) not null primary key, idade smallint, cidade varchar(50), estado varchar(2), foreign key (estado) references estado(nome)

21 Exercício Criar uma classe persistência e implementar os métodos (salvar e carregar), passando os parâmetros de acordo com a estrutura do banco de dados public abstract class ControladorDePersistencia { public static void salvarRegistro(Pessoa p, Conexao conexao) throws Exception { conexao.conecta(); System.out.println("conexão efetuada"); Connection con = conexao.getConection(); Statement st = con.createStatement(); String query = "INSERT INTO pessoa(nome, idade, estado) values ('" + p.getNome() + "'," + p.getIdade() + ",'" + p.getUF() + "')"; st.executeUpdate(query); st.close(); conexao.desconecta(); }

22 Exercício Criar uma classe persistência e implementar os métodos (salvar e carregar), passando os parâmetros de acordo com a estrutura do banco de dados public static Pessoa carregarRegistro(String nome, Conexao conexao) throws Exception { conexao.conecta(); Connection con = conexao.getConection(); Statement st = con.createStatement(); ResultSet rs; String query = "SELECT nome, idade, estado from pessoa where nome = '" + nome + "'"; rs = st.executeQuery(query); if( !rs.next() ) return null; Pessoa p = new Pessoa( nome, rs.getShort("idade"), rs.getString("estado") ); st.close(); conexao.desconecta(); return p; }}

23 Exercício Adicione a classe Conexao.java ao projeto, na camada de persistência e declare uma variável deste tipo e instancie ela no construtor do frame principal. Ao selecionar o botão cadastrar do formulário MDI, instanciar um objeto pessoa e armazenar no BD private void jButtonCadastrarActionPerformed(java.awt.event.ActionEvent evt) { Pessoa pessoa; short idade = Short.parseShort(jSpinnerIdade.getValue().toString()); pessoa = new Pessoa( jTextFieldNome.getText(), idade, jRadioButtonM.isSelected() ? 'M' : 'F', jFTextFieldData.getText(), jCheckBoxSozinho.isSelected(), (String)jComboBoxUF.getSelectedItem() ); try { ControladorDePersistencia.salvarRegistro(pessoa,conexao); } catch(Exception e) { e.printStackTrace(); }


Carregar ppt "Ronaldo Celso Messias Correia"

Apresentações semelhantes


Anúncios Google