Baixe o app para aproveitar ainda mais
Prévia do material em texto
Acesso a Banco de Dados (JDBC) Professor: Fábio José Rodrigues Pinheiro fabio@ifc-videira.edu.br Índice • Introdução • Conexão • Drivers • Statement • ResultSet • Transações Introdução • JDBC foi concebido para oferecer acesso universal a dados para programas escritos em Java. • O pacote JDBC (java.sql) provê classes conexão a uma grande variedade de SGBDs (Oracle, SQLServer, MySQL, PostgreSQL, DB2, ODBC, Firebird, etc.). • Além disso, provê classes para inserção, atualização e consulta de dados, através de queries sql. • JDBC é uma interface de nível de código – Código SQL é usado explicitamente dentro do código Java – O pacote java.sql consiste de um conjunto de classes e interfaces que permitem embutir código SQL em métodos. • Com JDBC é possível construir uma aplicação Java para acesso a qualquer banco de dados SQL. • Para usar JDBC é preciso ter um driver JDBC, fornecido pelo fabricante – O JavaSE distribui um driver ODBC que permite o acesso a bancos que não suportam JDBC mas suportam ODBC Introdução Drivers JDBC • Tipo 1: ponte ODBC-JDBC – Usam uma ponte para ter acesso a um banco de dados. Este tipo de solução requer a instalação de software do lado do cliente. • Tipo 2: solução com código nativo – Usam uma API nativa. Esses drivers são implementados em C ou C++. Requer software no cliente. • Tipo 3: solução 100% Java no cliente – Oferecem uma API de rede via middleware que traduz requisições para API do driver desejado. Não requer software no cliente. • Tipo 4: solução 100% Java – Drivers que se comunicam diretamente com o banco de dados usando soquetes de rede. É uma solução puro Java. Não requer código adicional do lado do cliente. Drivers JDBC Conexão JDBC • Antes da utilização efetiva de uma determinada base de dados, se faz necessário criar uma conexão com esta. • A conexão é feita em duas etapas: – Carga do driver relativo ao tipo do banco. – Efetuar a conexão através da passagem de parâmetros essenciais. • Uma aplicação JDBC pode carregar ao mesmo tempo diversos drivers. • Para especificar qual driver será usado usa-se uma URL: jdbc:<subprotocolo>:<dsn> – A aplicação usa o subprotocolo para identificar e selecionar o driver a ser instanciado. – O dsn é o nome que o subprotocolo utilizará para localizar um determinado servidor ou base de dados. – A sintaxe dependente do fabricante. Conexão JDBC • Alguns exemplos: jdbc:odbc:anuncios jdbc:postgresql://192.168.2.223:5432/academico jdbc:oracle:thin:@200.206.192.216:1521:exemplo jdbc:mysql://alnitak.orion.org/clientes jdbc:sqlserver://127.0.0.1/minhabase Conexão JDBC • Antes de iniciar uma conexão, é preciso carregar a classe do driver na aplicação que irá utilizá-lo: Class.forName("org.postgresql.Driver"); • Outros drivers: – PostgreSQL: org.postgresql.Driver – Oracle: oracle.jdbc.driver.OracleDriver – MySQL: com.mysql.jdbc.Driver – Firebird: org.firebirdsql.jdbc.FBDriver • Os principais fabricantes de BDs já fornecem um pacote (.jar) para conexão JDBC. Conexão JDBC • A classe DriverManager manipula objetos do tipo Driver – Possui métodos para registrar drivers, removê-los ou listá-los. – É usado para retornar Connection, que representa uma conexão a um banco de dados, a partir de uma URL JDBC recebida como parâmetro DriverManager.getConnection(url, userName, password); Conexão JDBC • Parâmetros – url: caminho para a conexão – userName: nome do usuário de acesso ao banco – password: senha do usuário de acesso ao banco • Exemplo: String url = "jdbc:postgresql://localhost:5432/acad"; String userName = ”admin"; String password = ”admin"; Connection conn = DriverManager.getConnection(url, userName, password); Conexão JDBC • Interfaces que contém métodos implementados nos drivers JDBC. – Connection • Representa uma conexão ao banco de dados, que é retornada pelo DriverManager na forma de um objeto. – Statement • Oferece meios de passar instruções SQL para o sistema de bancos de dados. – ResultSet • É um objeto para os dados recebidos. Conexão JDBC • Através do objeto Connection, chama-se sobre ele o método createStatement() para obter um objeto do tipo Statement: Statement stmt = con.createStatement() que poderá usar métodos como execute(), executeQuery(), executeBatch() e executeUpdate() para enviar instruções SQL ao BD. • Subinterfaces: – PreparedStatement e CallableStatement PreparedStatement pstmt = con.prepareStatement(...); CallableStatement cstmt = con.prepareCall(...); Statement • Exemplos: stmt.execute("CREATE TABLE disciplina " + "(codigo INT PRIMARY KEY, “ + “descricao CHAR(20));"); int num = stmt.executeUpdate("INSERT INTO disciplina " + "(codigo, descricao) VALUES " + "(183,‘Programação OO’)"); ResultSet cursor = stmt.executeQuery("SELECT * " + " FROM disciplinas “); Statement PreparedStatement • String com instrução SQL é preparado previamente, deixando-se "?" no lugar dos parâmetros – Os valores do campos no sql são adicionados através de métodos. • Parâmetros são inseridos em ordem, com setXXX (int posicao, XXX valor) onde XXX é um tipo do campo. PreparedStatement ... String sql = "INSERT INTO Livros VALUES(?, ?, ?)"; PreparedStatement cstmt = con.prepareStatement(sql); cstmt.setInt(1, 18943); cstmt.setString(2, “Gabriel Garcia Márquez"); cstmt.setString(3, “Cem anos de solidão"); cstmt.executeUpdate(); ... • O método executeQuery(), da interface Statement, retorna um objeto ResultSet. – Cursor para as linhas de uma tabela. – Pode-se navegar pelas linhas da tabela recuperar as informações armazenadas nas colunas • Os métodos de navegação são: – next(), previous(), absolute(), first() e last() • Alguns métodos para obtenção de dados: – getInt (int índice) ou getInt (String nome coluna) – getString (int índice) ou getString (String nome coluna) – getDate (int índice) ou getData (String nome coluna) ResultSet • Exemplo: ResultSet rs = stmt.executeQuery("SELECT Numero, Texto, " + " Data FROM Anuncios"); while (rs.next()) { int x = rs.getInt("Numero"); String s = rs.getString("Texto"); Date d = rs.getDate("Data"); ... } ResultSet Encerrando a Conexão • Após o uso, os objetos Connection, Statement e ResultSet devem ser fechados. • Isto pode ser feito com o método close(): – con.close(); – stmt.close(); – rs.close(); • A exceção SQLException é a principal exceção a ser observada em aplicações JDBC Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20
Compartilhar