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

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

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

Apresentações semelhantes


Apresentação em tema: "Ronaldo Celso Messias Correia Conexão com Bancos de Dados via JDBC."— Transcrição da apresentação:

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

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. 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. 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: 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); 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); 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. Um driver JDBC adequado ao SGBD que será utilizado. mysql-connector-java bin.jar mysql-connector-java bin.jar

3 Conexão JDBC: Conexão JDBC: import java.sql.*;... Connection connect; Statement stmt; … try { String url = "jdbc:mysql://" + host + "/" + banco_dados + "?user=" + login + "&password=" + password; String url = "jdbc:mysql://" + host + "/" + banco_dados + "?user=" + login + "&password=" + password; Class.forName("com.mysql.jdbc.Driver"); Class.forName("com.mysql.jdbc.Driver"); connect = DriverManager.getConnection(url); connect = DriverManager.getConnection(url); stmt = connect.createStatement();} 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");.} Biblioteca SQL Objeto para a Conexão Caminho de conexão Carrega o Driver Três tipos possíveis de erro Objeto para comandos SQL Efetua a conexão Cria objeto stmt para comandos SQL

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

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

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

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

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

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

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

11 codnomecpf 1Jose Anibal Cleide Alvares Celina Dilon Proprietário codcodpmodelovalor 11Fusca ,00 22Brasilia1200,00 31Gordine II4500,00 Veículo 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 //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); Inserindo um novo Registro (Tabela Pessoa)

13 //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); Alterando um Registro (Tabela Pessoa)

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))); break; case Types.SMALLINT: tupla.addElement(new Long(rs.getLong(i))); break; case Types.CHAR: tupla.addElement(rs.getString(i)); break; 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 Criar um novo projeto Separar o sistema em três camadas básicas: interface, estrutura e persistência; 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; 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 Em Projeto/Propriedades – Libraries, inclua o conector JBDC Criar uma classe Pessoa (pacote estrutura) Criar uma classe Pessoa (pacote estrutura) public class Pessoa { /* Atributos de Pessoa */ /* Atributos de Pessoa */ private String nome; private String nome; private short idade; private short idade; private char sexo; private char sexo; private String dataInscricao; private String dataInscricao; private boolean moraSozinho; private boolean moraSozinho; private String UF; private String UF; Criar a interface de cadastro Criar a interface de cadastro de Pessoa (pacote interface) de Pessoa (pacote interface)

20 Exercício Criar as tabelas no banco de dados - MySQL Criar as tabelas no banco de dados - MySQL create table estado ( nome varchar(2) not null primary key nome varchar(2) not null primary key); create table pessoa ( nome varchar(50) not null primary key, nome varchar(50) not null primary key, idade smallint, idade smallint, cidade varchar(50), cidade varchar(50), estado varchar(2), estado varchar(2), foreign key (estado) references estado(nome) 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 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 public static void salvarRegistro(Pessoa p, Conexao conexao) throws Exception { conexao.conecta(); conexao.conecta(); System.out.println("conexão efetuada"); System.out.println("conexão efetuada"); Connection con = conexao.getConection(); Connection con = conexao.getConection(); Statement st = con.createStatement(); Statement st = con.createStatement(); String query = "INSERT INTO pessoa(nome, idade, estado) values ('" + p.getNome() + "'," + p.getIdade() + ",'" + p.getUF() + "')"; String query = "INSERT INTO pessoa(nome, idade, estado) values ('" + p.getNome() + "'," + p.getIdade() + ",'" + p.getUF() + "')"; st.executeUpdate(query); st.executeUpdate(query); st.close(); st.close(); conexao.desconecta(); 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 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 public static Pessoa carregarRegistro(String nome, Conexao conexao) throws Exception { conexao.conecta(); { conexao.conecta(); Connection con = conexao.getConection(); Connection con = conexao.getConection(); Statement st = con.createStatement(); Statement st = con.createStatement(); ResultSet rs; ResultSet rs; String query = "SELECT nome, idade, estado from pessoa where nome = '" + nome + "'"; String query = "SELECT nome, idade, estado from pessoa where nome = '" + nome + "'"; rs = st.executeQuery(query); rs = st.executeQuery(query); if( !rs.next() ) return null; if( !rs.next() ) return null; Pessoa p = new Pessoa( nome, rs.getShort("idade"), rs.getString("estado") ); Pessoa p = new Pessoa( nome, rs.getShort("idade"), rs.getString("estado") ); st.close(); st.close(); conexao.desconecta(); conexao.desconecta(); return p; 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. 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 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() ); jCheckBoxSozinho.isSelected(), (String)jComboBoxUF.getSelectedItem() );try {ControladorDePersistencia.salvarRegistro(pessoa,conexao); } catch(Exception e) { e.printStackTrace(); } catch(Exception e) { e.printStackTrace(); } }


Carregar ppt "Ronaldo Celso Messias Correia Conexão com Bancos de Dados via JDBC."

Apresentações semelhantes


Anúncios Google