Desnvolvimento de Projetos e Aplicações Web Ceça Moraes – [email protected] Conteúdo JDBC 31/05/2017 2 Introdução JDBC (Java DataBase Conectivity) é uma API Java que fornece classes e interfaces para acessar e tratar dados Conjunto de classes que permite a um programa Java acessar um banco de dados relacional através da linguagem SQL Suportada pela maioria dos SGBDS (Oracle, Microsoft, IBM, etc.). 31/05/2017 3 JDBC A API JDBC padroniza: ̶ ̶ ̶ O mecanismo de como deve ser feito a conexão ao Banco de Dados; Abordagem para criar consultas Resultado da consulta Pacote java.sql 31/05/2017 4 Arquitetura Cógigo Java chama api JDBC JDBC carrega um driver Driver conversa com um banco de dados Podemos ter mais de um driver -> mais de um banco de dados Trocar o banco de dados sem modificar o código da aplicação 31/05/2017 5 ODBC ODBC (Open Database Connectivity) é uma API construída em C para acessar bancos de dados. ODBC não é uma API independente de plataforma, sendo patrocinado pela Microsoft. A API JDBC oferece um Driver específico para o padrão ODBC. 31/05/2017 6 java.sql: Classes e Interfaces 31/05/2017 7 Principais Classes e Interfaces DriverManager Connection Statement PreparedStatement CallableStatement ResultSet SQLException 31/05/2017 8 DriverManager Utilizado para estabelecer uma conexão entre o driver apropriado e o BD Métodos ̶ public static Connection getConnection (String url) throws SQLException ̶ onde: url = database url (do tipo jdbc:subprotocol:subname) ̶ 31/05/2017 Inicia uma conexão ao banco e retorna um objeto Connection 9 DriverManager Exemplo: ̶ 31/05/2017 Connection conn = DriverManager.getConnection ("jdbc:mysql://localhost:3306/mytes t?user=test master&password=1234"); 10 DriverManager String ̶ 31/05/2017 de conexão: jdbc:mysql://host:porta/banc odedados?propriedade1=valo r1&propriedade2=valor2... 11 Connection Representa uma conexão com um BD específico Comandos SQL são executados e resultados são retornados Aspectos de transações são tratados (commit,etc) Descrição do BD pode ser obtida (metadados) ̶ ̶ ̶ Métodos ̶ public Statement createStatement() throws SQLException ̶ Cria um objeto com uma instrução SQL para futura execução 31/05/2017 12 Connection Métodos public void close() throws SQLException Fecha a conexão atual ̶ public void commit() throws SQLException ̶ Confirma a transação public void rollback() throws SQLException 31/05/2017̶ Cancela a transação 13 Connection Exemplo ̶ Statement stmt = conn.createStatement(); Necessário antes de executar qualquer comando SQL 31/05/2017 14 Statement Utilizado para enviar comandos SQL simples Métodos ̶ public ResultSet executeQuery (String sql) throws SQLException Executa a consulta SQL e retorna um objeto ResultSet com o resultado da consulta 31/05/2017 15 Statement Métodos public int execute(String sql) throws SQLException Executa instruções INSERT, UPDATE ou DELETE especificada em SQL ̶ public void cancel() throws SQLException ̶ 31/05/2017 Cancela uma instrução SQL que esteja sendo executada 16 PreparedStatement Utilizado para enviar comandos SQL que recebam um ou mais parâmetros como entrada Eficiência: pré-compilação e armazenamento 31/05/2017 17 PreparedStatement Métodos public ResultSet executeQuery (String sql) throws SQLException ̶ Executa a consulta SQL passada em SQL e retorna um objeto ResultSet com o resultado da consulta PreparedStatement stmt; ResultSet rs = stmt.executeQuery("SELECT * FROM phones") 31/05/2017 18 PreparedStatement Métodos public int executeUpdate() throws SQLException Usado para efetuar atualizações em um banco de dados como a criação de tabelas (CREATE), alterações (UPDATE) ou exclusão (DELETE) de registros, etc. ̶ public setInt(int indice, int valor) public setBoolean(int indice, boolean valor) ̶ 31/05/2017 Usado para configurar os parâmetros de um código SQL 19 PreparedStatement Prepared Statements são usados por consultas que são realizadas muitas vezes. Eles são interpretados somente uma vez (pré-compilados). Parâmetros: ̶ ̶ 31/05/2017 setString(i, value), setInt(i, value), etc. o parâmetro i (ponto de interrogação) receberá o valor definido em value 20 Consulta com PreparedStatement String queryStr = "SELECT * FROM Program " + "WHERE Name = ? and Cost < ?”; PreparedStatement pstmt = con.prepareStatement(queryStr); pstmt.setString(1, “xxxxxxxx”); pstmt.setInt(2, 1000); ResultSet rs = pstmt.executeQuery(); 31/05/2017 21 Deleção com PreparedStatement String deleteStr = “DELETE FROM Program " + "WHERE Name = ? and Cost < ?”; PreparedStatement pstmt = con.prepareStatement(deleteStr); pstmt.setString(1, “XXXXXXXX”); pstmt.setInt(2, 1000); int delnum = pstmt.executeUpdate(); 31/05/2017 22 ResultSet Utilizado para realizar as consultas no BD Objeto com as linhas que satisfazem as condições do comando SQL. Fornece acesso aos dados destes registros Métodos ̶ public boolean next() Move 31/05/2017 para o próximo registro do ResultSet 23 ResultSet Métodos Métodos para obter o valor apropriado de cada coluna: ̶ ̶ ̶ ̶ 31/05/2017 getInt(int col) ou (String col) getBoolean(int col) ou (String col) getString(int col) ou (String col) getByte(int col) ou String col) 24 SQLException É a classe utilizada para tratar as possíveis exceções que podem ser geradas quando se acessa um Banco de Dados. Métodos ̶ public int getErrorCode() ̶ Obtém o código de erro específico do fabricante do BD try { } catch(SQLException e){ } ̶ ̶ ̶ 31/05/2017 25 SETE PASSOS BÁSICOS PARA USAR O JDBC 1. 2. 3. 4. Carregar o driver Definir a URL de Conexão Estabelecer a Conexão Criar um objeto Statement 5. Executar a Consulta 6. Processar os Resultados 7. Fechar a Conexão 31/05/2017 26 Usando o JDBC 1. Carregar o driver try { Class.forName("com.mysql.jdbc.Driver") ; . . . } catch(ClassNotFoundException e) {...} 31/05/2017 27 Usando o JDBC 2. Definir a URL de Conexão String URL = "jdbc:mysql://localhost:3306/ JavaJdbc"; 31/05/2017 28 Usando o JDBC Estabelecer a conexão String user= “abc”; String password = “secret”; Connection connection = DriverManager.getConnection(URL, user,password); 31/05/2017 29 Usando o JDBC 4. Criar um objeto Statement Statement statement = connection.createStatement(); 31/05/2017 30 Usando o JDBC 5. Executar a Consulta: String query = “SELECT col1, col2, col3 FROM tabela”; ResultSet resultSet = statement.executeQuery(query); Para modificar os dados, utilizar executeUpdate ou execute com UPDATE, INSERT ou DELETE 31/05/2017 31 Usando o JDBC 6. Processar os Resultados while(resultSet.next()) { System.out.println(resultSet. getString(1)+ “” + resultSet.getString(2)+ “” + resultSet.getInt(3)); } A primeira coluna tem índice 1 31/05/2017 32 Usando o JDBC 7. Fechar a Conexão connection.close(); Abrir e fechar conexão é um recurso que consome muito da máquina; 31/05/2017 33 Exemplo Completo com MySQL 31/05/2017 34 Aplicação Java import java.sql.*; public class ExemploJdbc { public static final String URL = "jdbc:mysql://localhost:3306/BdTeste"; public static final String DRIVER_NAME = “com.mysql.jdbc.Driver"; public static final String USER = “root"; public static final String 31/05/2017 35 PASSWD = “”; Aplicação Java (Continuação) public static void main(String args[]) { try { Class.forName(DRIVER_NAME); Connection conexao = DriverManager.getConnection(URL, USER, PASSWD); Statement stmt = conexao.createStatement(); ResultSet rs = stmt.executeQuery("SELECT NOME, TELEFONE FROM CONSUMIDOR"); 31/05/2017 36 Aplicação Java (Continuação) while(rs.next()) { System.out.println ("->"+rs.getString("nome") + " -->" + rs.getString("telefone")); } } catch (SQLException ex) { System.err.println ("SQLException: " + ex.getMessage()); } catch(ClassNotFoundException e){ System.err.println("Nao pode carregar o driver" + e.getMessage()); } } // fecha o try 37 } // fecha a classe Atualizando o BD Utiliza-se o método executeUpdate() quando se deseja inserir, alterar ou excluir registros try { Statement stmt = conexao.createStatement(); String sqlString=“DELETE FROM TABELA” stmt.executeUpdate(sqlString); } 31/05/2017 38 catch (SQLException e) {...} Exercício & Recomendações Exercício Testar o programa ExemploJdbc apresentado nos slides anteriores Não esquecer de: Criar o Banco de Dados no MySQL ̶ Nome: BdTeste Tabela: Consumidor Campos: id_consumidor, nome, telefone ̶ 31/05/2017 Inserir informações na Tabela Consumidor 40 Configurar no Eclipse Download do driver Jdbc Tipo 4 (mysql-connector-java-3.0.2betabin.jar) no portal Adicionar o driver ao eclipse. Ver no portal material de como configurar eclipse + mysql 31/05/2017 41