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

Post on 07-Apr-2016

275 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

JAVA DATABASE CONNECTIVITYJDBC

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

JDBCServlets e JD

BC

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

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!

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)

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

CONEXÃO AO SGBD - PASSOS Carga do driver

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

através da classe DriverManager

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

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

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

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

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

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()

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

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

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

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

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

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 } ...

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

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

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>, ...]}

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();

...

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

top related