j ava d atabase c onnectivity jdbc. jdbc o java database connectivity (jdbc) api é o padrão da...

25
JAVA DATABASE CONNECTIVITY JDBC

Upload: wagner-caires-das-neves

Post on 07-Apr-2016

275 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

JAVA DATABASE CONNECTIVITYJDBC

Page 2: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

JDBC O Java Database Connectivity (JDBC) API é o

padrão da indústria para que aplicações Java acessem bancos de dados relacionais.

O JBDC provê um conjunto de interfaces para acesso ao BD.• Uma implementação em particular dessas interfaces é

chamada de driver.• Cada BD possui um Driver JDBC específico (que é usado

de forma padrão - JDBC).• O drivers de outros fornecedores devem ser adicionados

ao CLASSPATH da aplicação para poderem ser usados.• Desta maneira, pode-se mudar o driver e a aplicação

não muda.

Servlets e JDB

C

Page 3: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

JDBCServlets e JD

BC

Page 4: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

JAVA.SQL – PRINCIPAIS INTERFACES• Connection

– Conexão (sessão) com um banco de dados específico– Contexto para execução de comandos SQL e retorno

de conjunto de resultados• Statement

– Comandos SQL estáticos– Execução e obtenção de resultados de comandos SQL

• PreparedStatement– Comandos SQL pré-compilados– Definição de parâmetros para o comando SQL antes

de executá-lo

Page 5: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

JDBC• Java Database Connectivity• API disponível no pacote java.sql• Interfaces padronizadas para acesso a bancos de

dados relacionais– Independente de fornecedor de SGBD do ponto de

vista da aplicação• Cada fabricante de banco de dados implementa

estas interfaces• Interpretação dos comandos SQL somente em

tempo de execução da aplicação!

Page 6: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

JAVA.SQL – PRINCIPAIS INTERFACES(CONTINUAÇÃO)

CallableStatement Execução de procedimentos armazenados (stored

procedures) ResultSet

Permite acesso aos dados de tabelas Normalmente é resultado da execução de um

Statement (ou PreparedStatement)

Page 7: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

JAVA.SQL – PRINCIPAIS CLASSES DriverManager

Maneira básica de manipular drivers JDBC Diversos métodos estáticos Método getConnection() retorna objeto do tipo

Connection SQLException (exceção)

Exceções que podem ser geradas por diversos métodos da API JDBC

Page 8: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

CONEXÃO AO SGBD - PASSOS Carga do driver

método Class.forName() Estabelecimento da conexão

através da classe DriverManager

Page 9: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

CARGA DO DRIVER Feita pela chamada do método Class.forName() Indica driver(s) a ser(em) utilizado(s) na aplicação Assinatura do método

public static Class forName(String className) throws ClassNotFoundException

Exemplos Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”) Class.forName(“oracle.jdbc.driver.OracleDriver”)

É necessário que a implementação do driver esteja no CLASSPATH

Page 10: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

CLASSE DRIVERMANAGER Maneira básica de manipular drivers JDBC Assinatura do método getConnection():

static Connection getConnection (String url, String user, String password) Retorna uma conexão ao banco de dados (Connection) url - identifica o banco de dados user - indica o usuário para conexão ao SGBD password - indica senha para conexão ao SGBD

Exemplos con = DriverManager.getConnection(“jdbc:odbc:Exemplo");

estabelece conexão com uma fonte de dados ODBC chamada “Exemplo” con = DriverManager.getConnection( "jdbc:oracle:thin:@200.135.24.52:1521:ORAZ","aluno21", "aluno21");

estabelece conexão usando utilizando um driver do tipo 4 da Oracle Necessário conhecer (em tempo de execução):

Identificação da classe que implementa o driver (para carga) Tipo do driver a ser utilizado

Page 11: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

CONEXÃO AO SGBD – EXEMPLO FIREBIRD

import java.sql.*;public class ConexaoFireBird {public static void main (String args[]) throws Exception

{Class.forName("org.firebirdsql.jdbc.FBDriver" );

Connection connection = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C://livros.GDB", “SYSDBA”,”masterkey” );...

Carga do driver

url:jdbc:firebirdsql – protocolo (jdbc) e subprotocolo (identificação do driver tipo firebird)localhost– endereço (ou nome) do servidor3050 - porta de comunicaçãoLivros.GDB - identificação do banco de dados

Acesso às definições do

pacote java.sql

Page 12: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

CONEXÃO AO SGBD – EXEMPLO MYSQLimport java.sql.*;public class ConexaoMySQL {public static void main (String args[]) throws Exception

{Class.forName("com.mysql.jdbc.Driver" );

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/books", “root”,”root” );...

Carga do driver

url:jdbc:mysql – protocolo (jdbc) e subprotocolo (identificação do driver tipo mysql)localhost– endereço (ou nome) do servidorbooks - identificação do banco de dados

Acesso às definições do

pacote java.sql

Page 13: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

EXECUÇÃO DE COMANDOS SQL Através de statements

Statements são criados a partir de uma conexão Classes que podem representar statements

Statement PreparedStatement CallableStatement

Processamento do resultado Interface ResultSet

Page 14: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

INTERFACE CONNECTION Conexão (sessão) com um banco de dados

específico Contexto para execução de comandos SQL e

retorno de conjunto de resultados Objetos deste tipo são criados pelo método

DriverManager.getConnection()

Page 15: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

INTERFACE CONNECTION PRINCIPAIS MÉTODOS public Statement createStatement() throws SQLException cria um objeto do tipo Statement para posterior

execução de comandos SQL public PreparedStatement prepareStatement(String sql)

throws SQLException cria um objeto do tipo PreparedStatement para posterior

execução de comandos SQL public CallableStatement prepareCall(String sql)

throws SQLException cria um objeto do tipo CallableStatement para

chamadas a stored procedures

Page 16: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

INTERFACE STATEMENT Representação de comandos SQL Objetos deste tipo são criados pelo método

Connection.createStatement() Principais métodos

public ResultSet executeQuery(String sql) throws SQLException executa o comando SQL do parâmetro e retorna o resultado da query em um

objeto ResultSet usado para comandos SQL select exemplo

Statement st = con.createStatement();ResultSet rs=st.executeQuery( “select nm_cliente from cliente where cd_cliente = 1”);

public int executeUpdate(String sql) throws SQLException executa o comando SQL do parâmetro e retorna o número de linhas

atualizadas usado para comandos SQL insert, update e delete Exemplo Statement st = con.createStatement();

int n = st.executeUpdate( “update item_pedido set qt_pedida=0”);

public void close() throws SQLException

Page 17: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

INTERFACE RESULTSET• Objetos deste tipo criados através de um

Statement• Representação do resultado de uma query• Manutenção de um cursor apontando para a linha

de dados corrente– cursor inicialmente posicionado antes da primeira linha– método next() move o cursor para a próxima linha

• Métodos getXXX() obtém os valores da linha corrente– através da posição relativa da coluna (iniciando em 1)– através do nome da coluna– XXX indica o tipo (Java) a ser retornado

Page 18: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

INTERFACE RESULTSETPRINCIPAIS MÉTODOS public boolean next() throws SQLException

posiciona o cursor na próxima linha de dados cursor inicialmente posicionado antes da primeira linha o primeiro chamado para este método torna a primeira linha a linha

corrente, a segunda chamada a segunda e linha e assim por diante retorno

true se a próxima linha é valida false se não há mais linhas

public XXX getXXX(int columnIndex) throws SQLException acessa valor da linha de dados corrente pelo posição relativa da

coluna public XXX getXXX(String columnName) throws SQLException

acessa valor da linha de dados corrente pelo nome da coluna public boolean wasNull() throws SQLException

Retorna true se o último método getXXX() acessou a uma coluna com valor SQL null (senão retorna false)

public void close() throws SQLException

Page 19: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

EXEMPLO EXECUTESQLMYSQL.JAVA...connection = DriverManager.getConnection(DATABASE_URL,

USERNAME,PASSWORD );statement = connection.createStatement();ResultSet rs = statement.executeQuery("SELECT authorID, firstName, lastName

FROM authors");

while (rs.next()) {

System.out.printf( "%d\t", rs.getInt( 1 ) );System.out.printf( "%s\t", rs.getString( 2 ) );System.out.printf( "%s\t", rs.getString( "lastName" );System.out.println();

}...

Servlets e JDB

C

Page 20: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

INTERFACE PREPAREDSTATEMENT Representação de comandos SQL (assim como Statement) Substituição de parâmetros (símbolo “?”) através dos métodos setXXX Utilizado para comandos SQL executados múltiplas vezes e onde se

alteram alguns parâmetros Exemplo ...

int cdPedido, cdProduto; float qtPedida;... String insertItem = "insert into item_pedido (cd_pedido, cd_produto, qt_pedida) " + " values (?, ?, ?)"; PreparedStatement pstItem = con.prepareStatement(insertItem);

pstItem.setInt (1, cdPedido); //substitui primeiro “?” por um int pstItem.setInt (2,cdProduto); //substitui segundo “?” por um int pstItem.setFloat(3, qtPedida); //substitui terceiro “?” por um float pstItem.executeUpdate(); //executa comando SQL } ...

Page 21: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

EXEMPLO PREPAREMYSQL.JAVA//Conulta com parâmetros PreparedStatement ps =

connection.prepareStatement("SELECT authorID, firstName, lastName FROM authors where authorID=(?)");

ps.setInt(1,3);//configura paâmetro 1 com valor=3//Executa consultaResultSet rs=ps.executeQuery();

Servlets e JDB

C

Page 22: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

INTERFACE CALLABLESTATEMENTServlets e JD

BC

– fornece uma interface uniforme para especificar os parâmetros de entrada e saída para procedures armazenadas e para invocar procedures armazenadas.

• public void registerOutParameter((int parameterIndex, int sqlType)

) throws SQLException– Registra parâmetro de saída.

• public void setXXXX(int parameterIndex, XXX valor) ) throws SQLException

– Configura parâmetro com valor

– XXX é um tipo Java• public void execute() ) throws SQLException

– Método herdado de PreparedStatement que executa a procedure

Page 23: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

INTERFACE CALLABLESTATEMENTServlets e JD

BC

– O parâmetro do método prepareCall da interface Connection deve ter o seguinte formato para procedures com retorno:

{?= call <procedure-name>[<arg1>,<arg2>, ...]}

– Para procedures sem retorno:

{call <procedure-name>[<arg1>,<arg2>, ...]}

Page 24: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

EXEMPLOServlets e JD

BC

...CallableStatement cs = connection.prepareCall("{?=call

PROC_JAVA(?,?)}");cs.registerOutParameter(1, Types.INTEGER);

cs.setInt(2, valor1);cs.setInt(3, valor2);cs.execute();

...

Page 25: J AVA D ATABASE C ONNECTIVITY JDBC. JDBC O Java Database Connectivity (JDBC) API é o padrão da indústria para que aplicações Java acessem bancos de dados

TIPOS JDBC X MÉTODOS GETXXX()TIPOS DEFINIDOS NA CLASSE JAVA.SQL.TYPES