1 fundamentos de jdbc 14aula centro federal de educaÇÃo tecnologica do rn prof. alessandro j. de...
TRANSCRIPT
11
Fundamentos Fundamentos de JDBCde JDBC
14
AULAAULA
CENTRO FEDERAL DE EDUCAÇÃO CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO RNTECNOLOGICA DO RN
Prof. Alessandro J. de Souza
22
JDBC
JDBC é uma interface baseada em Java para acesso a bancos de dados através de SQL.
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
33
Tipos de Driver JDBC
Tipo 1: ponte ODBC-JDBC
O tipo 1 é um driver de ponte entre Java e ODBC.
O driver de ponte mais conhecido é o fornecido pela Sun o JDBC-ODBC
bridge.
Tipo 2: solução com código nativo
Usam uma API nativa. Esses drivers contém métodos Java
implementados em C ou C++.
Tipo 3: solução 100% Java no cliente
O tipo 3 é um driver totalmente Java que se comunica com algum tipo de
middleware que então se comunica com o banco de dados
Tipo 4: solução 100% Java
O tipo 4 é um driver totalmente Java que vai diretamente ao banco de
dados
44
Tipos de Driver JDBC
Fonte- http://www.argonavis.com.br
55
Como enviar consultas ao banco?
1. Carregar Driver JDBC;
2. Conectar a fonte de dados;
3. Executar declarações SQL;
66
Carregar Driver JDBC
Carregar Driver JDBC É preciso carregar a classe do driver na aplicação que irá utilizá-lo.
Isto pode ser feito com Class.forName():
Exemplo:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Class.forName(“org.postgresql.Driver");
77
Conectar a fonte de dados
Conectar a fonte de dados Para determinar 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.
Sintaxe dependente do fabricante:
jdbc:odbc: nome_fonte_de_dados
jdbc:postgresql://maquina:porta/nome_fonte_de_dados
Connection con = DriverManager.getConnection ("jdbc:odbc:banco",“usuário","senha")
A classe DriverManager manipula objetos do tipo Driver.
88
Executar declaraões SQL
Existem três formas diferentes de executar declarações SQL:
Statement - Oferece meios de passar instruções SQL para o sistema de bancos de dados.
PreparedStatement – Declarações SQL semi-estáticas
CallableStatement - para chamada de stored procedures
Statement stmt = con.createStatement()
PreparedStatement pstmt = con.prepareStatement(...);
CallableStatement cstmt = con.prepareCall(...);
99
Exemplo de uso de Statement
stmt.execute("CREATE TABLE pessoas "
+ "(codigo INT PRIMARY KEY, "
+ " nome CHAR(20), "
+ " cidade CHAR(20));");
int linhasModificadas =
stmt.executeUpdate("INSERT INTO pessoas "
+ "(codigo, nome, cidade) VALUES "
+ "(001, 'Carlos', 'natal')");
ResultSet cursor =
stmt.executeQuery("SELECT nome, cidade "
+ " FROM pessoas "
+ " WHERE codigo = 001");
1010
Exemplo de uso de PreparedStatement
Statement pré-compilado que é mais eficiente quando várias
queries similares são enviadas com parâmetros diferentes
String com instrução SQL é preparado previamente,
deixando-se "?" no lugar dos parâmetros
Parâmetros são inseridos em ordem, com setTipo().
String sql = "INSERT INTO pessoas (codigo, nome, cidade)
VALUES(?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, 002);
pstmt.setString(2, "Alessandro");
pstmt.setString(3, "João Pessoa");
pstmt.executeUpdate();
1111
ResultSet
O método executeQuery(), da interface Statement, retorna um objeto ResultSet. Pode-se navegar pelas linhas da tabela recuperar as informações armazenadas nas colunas
Os métodos de navegação são next(): move uma linha para frente
previous(): move uma linha para trás
absolute(int n): move para alinha com número específico
first(): move para o primeiro registro
last(): move para o ultimo registro
....
ResultSet rs = stmt.executeQuery(sql);
While(rs.next()){
//processa dados ...
}
1212
Tipos Java / SQL e métodos de Acesso
1313
Exemplo de ResultSet
ResultSet rs =
stmt.executeQuery("SELECT * FROM pessoas");
while (rs.next()) {
int cod = rs.getInt("codigo");
String nome = rs.getString("nome");
String cidade = rs.getString("cidade");
// faça algo com os valores obtidos na consulta...
}
1414
Método Close() e Exceções
Após o uso, os objetos Connection, Statement e ResultSet
devem ser fechados através do método close():
conexão.close();
statement.close();
resultset.close();
A exceção SQLException é a principal exceção a ser
observada em aplicações JDBC
Try{
//comando de acesso ao banco
}cacth (SQLException ex) {
//tratamento de exceções
}finally{
//fechamento de conexões
}
1515
Exemplo de Persistência
public class Banco {
public static Connection conn = null;
public static Connection getConexao(){
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection("jdbc:odbc:testemy","SA","");
}catch (ClassNotFoundException exc) {
System.out.println("Error ao carregar o Driver");
} catch (SQLException ex) {
System.out.println("Probelmas ao abrir a conexao com o banco");
}
return conn;
}
1616
Exemplo de Persistência
public void salva(Pessoa pessoa) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = Banco.getConexao();
stmt = conn.prepareStatement("insert into tabela1 (nome,telefone, endereco) values (?, ?, ? )");
stmt.setString(1, pessoa.getNome().trim());
stmt.setString(2, pessoa.getTelefone().trim());
stmt.setString(3, pessoa.getEndereco().trim());
stmt.executeUpdate();
} catch (SQLException ex) {
System.out.println("Error fatal");
} finally {
Banco.closeConexao(conn, rs, stmt);
}
}
1717
Transações
Permite a execução atômica de comandos enviados ao banco.
Implementada através dos métodos de Connection
commit() – aplica mudanças no banco
con.commit();
rollback() – desfaz operações realizadas até o
momento
con.rollback();
setAutoCommit(boolean autoCommit): default é
true.
con.setAutoCommit(false);
1818
Construindo uma Aplicação web com acesso
a banco de dados