Buscar

JDBC - banco de dados com Java

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

Continue navegando