capítulo 11. java data base conectivity introdução pacote java.sql abrindo e fechando...

58
JDBC Capítulo 11

Upload: murilo-triano

Post on 07-Apr-2016

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

JDBCCapítulo 11

Page 2: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Java Data Base Conectivity Introdução Pacote java.sql Abrindo e fechando

conexões Operações na base

de dados Operações

parametrizadas

Transações Consultas Stored procedures Design patterns

DAO e VO Projeto Final

2

Page 3: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Introdução Arquitetura Cliente/Servidor

ServidorOracle

MS SQL ServerMySql

Cliente

Cliente

Cliente

3

Page 4: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Introdução JDBC

O JDBC (Java Data Base Conectivity) é uma especificação elaborada pela antiga Sun para prover a acessibilidade de aplicações Java com bancos de dados.

Trata-se de um padrão de acesso a dados obedecido pela indústria de bancos de dados.

A fim de seguir este padrão, os fabricantes devem distribuir drivers JDBC aos desenvolvedores Java.

4

Page 5: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

BANCO DEDADOS

Introdução Tipos de driver

APLICAÇÃO JAVADRIVER TIPO 1

APLICAÇÃO JAVADRIVER TIPO 2

APLICAÇÃO JAVADRIVER TIPO 3

APLICAÇÃO JAVADRIVER TIPO 4

BANCO DEDADOS

BANCO DEDADOS

BANCO DEDADOS

MIDDLEWARE

CONFIG. ODBC COMPONENTE “CLIENT”

5

Page 6: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Introdução Tipos de driver

Tipo 1

Driver JDBC que usa a ponte de comunicação ODBC-JDBC para acessar a base pelo antigo padrão ODBC criado pela Microsoft.

O ODBC trata-se de um antigo padrão de acessibilidade desenvolvido pela Microsoft que ainda pode ser utilizado no acesso a fontes de dados legadas tais como Fox Pro, DBase, Clipper, Access, etc.

6

Page 7: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Introdução Tipos de driver

Tipo 2

Um driver se enquadra no tipo 2 quando necessita de algum software complementar instalado na estação de trabalho (máquina cliente) para acessar a base de dados.

Utilizam API’s auxiliares e requerem a instalação de algum componente adicional nativo ao Sistema Operacional.

7

Page 8: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Introdução Tipos de driver

Tipo 3

Tipo de driver que necessita de uma API de rede via middleware geralmente instalado no próprio servidor de dados para traduzir requisições para o driver desejado.

Não requer nenhum software adicional no cliente além do driver JDBC.

8

Page 9: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Introdução Tipos de driver

Tipo 4

Driver que se comunica diretamente com o banco de dados usando puramente soquetes de rede.

É desenvolvido pelo fabricante totalmente em Java.

Não requer código adicional do lado do cliente nem no servidor. É simples de usar e possui melhor performance que os demais tipos.

9

Page 10: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Introdução Alguns drivers

Microsoft SQL Server JDBC Driver○ sqljdbc4.jar

MySql Connector / J○ mysql-connector-java-5.1.20-bin.jar

Oracle JDBC○ ojdbc6.jar (antigo classes12.jar)

10

Page 11: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Pacote java.sql Contém classes utilizadas no acesso e

manipulação de dados externos via JDBC.

11

Page 12: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Pacote java.sql

12

Connection

Statement

SQLException

DriverManager

PreparedStatement

CallableStatement

ResultSet

0..1

0..1

0..*

Page 13: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Abrindo e fechando conexões Carregamento do driver

Antes de solicitar uma conexão com a base de dados, devemos primeiramente realizar o carregamento do driver para a memória através do comando:

Class.forName(“com.mysql.jdbc.Driver”)

O comando Class.forName(“...”) realiza o carregamento de alguma classe para a memória sem criar instâncias.

13

Page 14: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Abrindo e fechando conexões Carregamento do driver

O método forName() requer o tratamento da exception ClassNotFoundException que pode ocorrer na aplicação caso o driver não esteja no classpath:

try {Class.forName(“com.mysql.jdbc.Driver”);

} catch (ClassNotFoundException e) {System.out.println(“Não foi possível carregar o

driver.”);}

14

Page 15: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Abrindo e fechando conexões Abrindo a conexão com a base de dados.

A interface java.sql.Connection representa uma conexão com a base de dados e é o ponto de partida para realizarmos qualquer tipo de operação com esta.

Podemos obtem uma Connection (abrir uma conexão) utilizando a classe java.sql.DriverManager:

Connection cn = DriverManager.getConnection(“jdbc:mysql://sigma.server.com.br:3306/dbtest”,

“usuario”, “senha”);

15

Page 16: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Abrindo e fechando conexões Abrindo a conexão com a base de dados.

DriverManager.getConnection(“jdbc:mysql://sigma.server.com.br:3306/dbtest”, “usuario”, “senha”);

16

URL de conexão(Caminho/endereço do servidor) Usuário Senha

Page 17: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Abrindo e fechando conexões URL de conexão

A URL de conexão define o caminho do servidor de dados e é específico para cada driver utilizado:

jdbc:mysql://servidor:3306/databasejdbc:sqlserver://servidor\

instancia:1433;databaseName=databasejdbc:oracle:thin:@servidor:1521:instancia

17

Page 18: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Abrindo e fechando conexões Fechando a conexão

Após encerrarmos todas as operações com a base de dados devemos fechar a conexão utilizada:

cn.close();

18

Conexão utilizada no acesso à base de dados

Page 19: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Abrindo e fechando conexões Fechando a conexão

Tanto a abertura quanto o fechamento da conexão requerem o tratamento da exceção SQLException:

try {Class.forName(“com.mysql.jdbc.Driver”);Connection cn = DriverManager.getConnection(

“jdbc:mysql://server:3306/db”, “usuario”, “senha”);/* ... operações com a base de dados ... */cn.close();

} catch (ClassNotFoundException e) {System.out.println(“Não foi possível carregar o driver.”);

} catch (SQLException e) {System.out.println(“Falha ao conectar à base de dados.”);

}19

Page 20: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações na base de dados Com a conexão aberta podemos realizar operações na

base de dados, como inclusão, exclusão, alteração e outros.

Cada operação na base de dados é definida por uma instrução na linguagem SQL, chamada de “statement”:

UPDATE tab_funcionario SET salario = 5000 WHERE matr = 34

INSERT INTO tab_setor (codigo, nome) VALUES (34, ‘RH’)

DELETE FROM tab_produto WHERE codigo = 4983

20

Page 21: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações na base de dados Interfaces statements:

21

Statement

PreparedStatement

CallableStatement

Page 22: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações na base de dados Interfaces statements:

StatementUtilizado para executar instruções SQL simples e pré-definidas.

PreparedStatementUtilizado para executar instruções SQL parametrizadas.

CallableStatementUtilizado para executar stored procedures e functions

22

Page 23: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações na base de dados A interface Statement

Utilizado para execução de simples instruções SQL

Statement st = cn.createStatement();

st.executeUpdate(“UPDATE tab_func SET salario = salario + 200”);st.executeUpdate(“DELETE FROM tab_func”);st.executeUpdate(“INSERT INTO tab_cargo (nome) VALUES (‘RH’)”);st.executeUpdate(“CREATE TABLE tab_produto (...)”);

st.close();

23

Conexão utilizada no acesso à base de dados

Page 24: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas A interface PreparedStatement

Principal tipo de statement utilizado no acesso e manipulação de dados da base

Representa alguma instrução SQL parametrizada, onde alguns de seus valores são dinamicamente assinalados pela aplicação

A principal vantagem do PreparedStatement é que sua instrução pode ser executada diversas vezes, cada hora com valores diferentes.

24

Page 25: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas A interface PreparedStatement

Exemplo 1

PreparedStatement ps = cn.prepareStatement(“INSERT INTO tab_func (matricula, nome, salario) VALUES (?, ?, ?)”);

ps.setInt(1, 1001);ps.setString(2, “José Souza”);ps.setDouble(3, 3200.45);

ps.executeUpdate();ps.close();

25

Conexão utilizada no acesso à base de dados

1

2

3

Page 26: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas A interface PreparedStatement

Exemplo 2

PreparedStatement ps = cn.prepareStatement(“UPDATE tab_func SET salario = ? WHERE matricula = ?”);

ps.setDouble(1, 3200.45);ps.setInt(2, 1001);ps.executeUpdate();

ps.setDouble(1, 7350.92);ps.setInt(2, 1005);ps.executeUpdate();

ps.close();26

Conexão utilizada no acesso à base de dados

1 2

Page 27: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas A interface PreparedStatement

Ao criar um PreparedStatement devemos especificar a declaração SQL que será executada contendo caracteres de interrogação ?.

Cada interrogação contida na declaração SQL representa um parâmetro – um valor a ser assinalado dinamicamente na aplicação.

Um PreparedStatement deve ter todos os seus valores assinalados antes de ser executado.

27

Page 28: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas Tipos de parâmetros

Tipo SQL Método set Tipo JavaCHAR, VARCHAR setString() java.lang.StringINT, DECIMAL, NUMERIC(sem parte fracionária)

setInt() int

DOUBLE, DECIMAL, NUMERIC (podendo haver parte fracionária)

setDouble() double

BOOLEAN setBoolean() booleanDATE setDate() java.sql.DateTIME setTime() java.sql.TimeDATETIME, TIMESTAMP setTimestamp() java.sql.TimestampBLOB, MEDIUMBLOB, LONGBLOB setBinaryStream() java.io.InputStreamNULL setNull()

28

Page 29: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas Método setString()

Assinala um parâmetro do tipo texto.

ps = cn.prepareStatement(“DELETE FROM tab_func WHERE cargo LIKE ?”);

ps.setString(1, “Manuel”);ps.executeUpdate();ps.close();

29

Page 30: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas Método setInt()

Assinala um parâmetro numérico sem parte fracionária.

ps = cn.prepareStatement(“DELETE FROM tab_func WHERE matricula = ?”);

ps.setInt(1, 7012);ps.executeUpdate();ps.close();

30

Page 31: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas Método setDouble()

Assinala um parâmetro numérico podendo possuir parte fracionária.

ps = cn.prepareStatement(“UPDATE tab_func SET salario = ?”);

ps.setInt(1, 2500.35);ps.executeUpdate();ps.close();

31

Page 32: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas Método setBoolean()

Assinala um parâmetro booleano e armazena na base como 0 (false) ou 1 (true)

ps = cn.prepareStatement(“UPDATE tab_func SET ativo = ?”);ps.setBoolean(1, true);ps.executeUpdate();ps.close();

32

Page 33: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas Método setDate()

Assinala um parâmetro do tipo java.sql.Date, que representa uma data (dia, mês e ano)

ps = cn.prepareStatement(“UPDATE tab_func SET nasc = ?”);

Calendar calendar = Calendar.getInstance();Calendar.set(1992, 0, 25); /* dia 25/01/1992 */java.sql.Date date = new java.sql.Date(calendar.getTimeInMillis());

ps.setDate(1, date);ps.executeUpdate();ps.close();

33

Page 34: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas Método setTime()

Assinala um parâmetro do tipo java.sql.Time, que representa um horário (hora, minuto e segundo)

ps = cn.prepareStatement(“UPDATE tab_func SET hr_entr = ?”);

Calendar calendar = Calendar.getInstance();Calendar.set(0, 0, 0, 12, 15, 30); /* 12:15:30 */java.sql.Time time = new java.sql.Time(calendar.getTimeInMillis());

ps.setTime(1, time);ps.executeUpdate();ps.close();

34

Page 35: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas

Método setTimestamp()Assinala um parâmetro do tipo

java.sql.Timestamp, que representa um instante no tempo (ano, mês, dia, hora, minuto e segundo)

ps = cn.prepareStatement(“UPDATE tab_func SET nasc = ?”);

Calendar calendar = Calendar.getInstance();Calendar.set(1992, 0, 25, 12, 15, 30); /* 25/01/1992 12:15:30 */Timestamp dateTime = new Timestamp(calendar.getTimeInMillis());

ps.setTimestamp(1, dateTime);ps.executeUpdate();ps.close();

35

Page 36: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas Método setBinaryStream()

Assinala um parâmetro do tipo java.io.InputStream, que representa alguma informação binária, como uma foto, mp3, doc ou outro.

ps = cn.prepareStatement(“INSERT INTO tab_foto (foto) VALUES (?)”);

ps.setBinaryStream(1, new FileInputStream(“C:\\image\\foto.jpg”));ps.executeUpdate();ps.close();

36

Page 37: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Operações parametrizadas Método setNull()

Assinala um parâmetro com o valor NULL

ps = cn.prepareStatement(“INSERT INTO tab_func (nome, salario) VALUES (?, ?)”);

ps.setString(1, “Manuel silva”);ps.setNull(2);ps.executeUpdate();ps.close();

37

Page 38: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Exercício Crie uma aplicação para cadastrar cargos na tabela

tab_role.

A aplicação deverá solicitar que o usuário digite nomes de cargos em prompt de comando (utilize a classe Scanner).

Para cada cargo digitado abra a conexão com a base de dados e execute o comando abaixo passando como parâmetro o cargo digitado pelo usuário:

INSERT INTO tab_role (role_name) VALUES (?)

38

Page 39: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Transações Chamamos de transação a um conjunto de

operações realizadas na base de dados que podem ser desfeitas em situações de falha ou outro problema.

Quando corretamente utilizada, uma transação garante a integridade dos dados contidos na base.

Chamamos de rollback ao comando utilizado para desfazer as operações retidas pela transação e commit ao comando utilizado para efetivá-las na base de dados.

39

Page 40: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Transações O JDBC permite a criação de aplicações Java que

manipulam transações com bancos de dados que oferecem suporte a este tipo de recurso.

Para isto contamos com os seguintes métodos da interface java.sql.Connection:

setAutoCommit(boolean) commit() rollback()

40

Page 41: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Transações Exemplo

cn = DriverManager.getConnection(...);st = cn.createStatement();

try {cn.setAutoCommit(false);st.executeUpdate(“INSERT INTO tab (...) VALUES (...)”); st.executeUpdate(“INSERT INTO tab (...) VALUES (...)”);st.executeUpdate(“DELETE FROM tab WHERE ...”);st.executeUpdate(“UPDATE tab SET ....”);cn.commit();

} catch (Exception e) {cn.rollback();

}

41

Page 42: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Consultas As consultas na base de dados são realizadas

mediante o comando SELECT.

Através dele podemos obter os dados contidos em uma ou mais tabelas seguindo critérios, agrupamentos e/ou ordenações conforme necessidade da aplicação.

Para capturarmos os dados provenientes do comando SELECT, o JDBC conta com a interface java.sql.ResultSet

42

Page 43: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Consultas O ResultSet

Um ResultSet representa um cursor proveniente da base de dados.

Trata-se de um conjunto de dados em memória de forma tabular que possui um ponteiro apontando para uma de suas linhas, a qual é chamada de registro atual.

43

Page 44: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

ConsultasResultSet rs = st.executeQuery(“SELECT * FROM tab_func”);

rs.next();codigo = rs.getInt(“f_code”);nome = rs.getString(“f_name”);salario = rs.getDouble(“f_rmnt”);...rs.next();codigo = rs.getInt(“f_code”);nome = rs.getString(“f_name”);salario = rs.getDouble(“f_rmnt”);...rs.next();codigo = rs.getInt(“f_code”);nome = rs.getString(“f_name”);salario = rs.getDouble(“f_rmnt”);...

f_code f_name f_rmnt

1003 Manuel1.253,86

1004 Joaquim 950,601008 Maria

1.530,151012 Henrique

6.530,451039 João

4.350,121112 Priscila 843,001128 Ricardo

7.815,26 44

Algum Statement ou PreparedStatement

Page 45: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

ConsultasResultSet rs = st.executeQuery(“SELECT * FROM tab_func”);

while (rs.next()) {codigo = rs.getInt(“f_code”);nome = rs.getString(“f_name”);salario = rs.getDouble(“f_rmnt”);...

}

rs.close();

f_code f_name f_rmnt

1003 Manuel1.253,86

1004 Joaquim 950,601008 Maria

1.530,151012 Henrique

6.530,451039 João

4.350,121112 Priscila 843,001128 Ricardo

7.815,26 45

Page 46: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Consultas Outro exemplo

PreparedStatement ps = cn.prepareStatement(“SELECT f_name, f_rmnt FROM tab_func WHERE salario > ?”);

ps.setDouble(1, 1000);

ResultSet rs = ps.executeQuery();

while (rs.next()) {nome = rs.getString(“f_name”);salario = rs.getDouble(“f_rmnt”);...

}rs.close();

46

Page 47: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Exercício Crie uma aplicação que solicite ao usuário que digite

um nome ou o pedaço de um nome.

Realize uma busca na tabela de funcionários exibindo na tela o nome e salário de todos os usuários que possuam o pedaço de nome digitado.

Utilize a consulta abaixo para obter os dados da base:

SELECT func_name, func_rmntFROM tab_funcWHERE func_name LIKE ?

47

Page 48: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Stored procedures Chamamos de Stored Procedure a um conjunto

de instruções SQL que juntas formam um pequeno programa armazenado e executado no banco de dados.

Alguns bancos de dados como MS SQL, Oracle, MySQL, Postgree e outros permitem este tipo de recurso.

O uso de Stored Procedures pode reduzir o tráfego na rede, melhorar a performance ou criar mecanismos de segurança ao realizar alguma operação na base de dados.

48

Page 49: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Stored procedures As Stored Procedures são semelhantes a

métodos Java. Podem possuir parâmetros e valores de retorno.

CREATE PROCEDURE prc_calcula_juros(IN p_valor_inicial DECIMAL(10,2),IN p_taxa DOUBLE,IN p_prazo INTEGER,OUT p_valor_final DECIMAL(10,2))

BEGIN... ...... ...... ...

END;

49

Page 50: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Stored procedures A interface CallableStatement

No JDBC podemos solicitar a execução de uma Stored Procedure através da interface java.sql.CallableStatement

CallableStatement cs =cn.prepareCall(“{ call prc_calcula_juros(?, ?, ?, ?) }”);

cs.setDouble(1, 100.0);cs.setDouble(2, 0.1);cs.setInt(3, 2);cs.registerOutParameter(4, Types.DOUBLE);

cs.executeUpdate();double result = cs.getDouble(4);

50

Page 51: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Stored procedures A interface CallableStatement

Para obter uma instância de CallableStatement utilizamos o método prepareCall() sobre a conexão com a base.

Devemos neste momento informar o String de execução da Stored Procedure desejada:

CallableStatement cs =cn.prepareCall(“{ call prc_calcula_juros(?, ?, ?, ?) }”);

51

Nome da procedure

ParâmetrosConexão utilizada no acesso à base de dados

Page 52: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Stored procedures A interface CallableStatement

Os parâmetros de entrada (IN) devem ser todos preenchidos conforme seu tipo, inserindo os valores desejados:

cs.setDouble(1, 100.0); /* Parâmetro 1 */cs.setDouble(2, 0.1); /* Parâmetro 2 */cs.setInt(3, 2); /* Parâmetro 3 */

52

Page 53: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Stored procedures A interface CallableStatement

Os parâmetros de saída (OUT) devem ser todos registrados conforme seu tipo, informando ao JDBC que estes são valores que serão retornados pela procedure.

Para informar o tipo de retorno, utilize uma das constantes da classe java.sql.Types:

cs.registerOutParameter(4, Types.DOUBLE); /* Parâmetro 4 */

53

Page 54: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Stored procedures A interface CallableStatement

Após preenchidos e/ou registrados todos os parâmetros, podemos executar a procedure com o método executeUpdate()

Após executada a procedure, podemos recolher os valores de retorno provenientes dos parâmetros de saída

cs.executeUpdate();double result = cs.getDouble(4);

54

Número do parâmetro de saída

Page 55: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Exercício (parte 1) A procedure prc_numero_descricao foi criada em

MySql para fornecer a descrição por extenso de um número inteiro especificado.

Para tal, esta procedure possui dois parâmetros:

Parâmetro 1:○ Nome: p_numero○ Tipo: INTEGER○ I/O: IN (entrada)

CREATE PROCEDURE prc_numero_descricao(IN p_numero INTEGER,OUT p_descricao VARCHAR(100))

Parâmetro 2:○ Nome: p_descricao○ Tipo: VARCHAR(100)○ I/O: OUT (saída)

55

Page 56: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Exercício (fim) Crie uma aplicação Java que solicite que o

usuário digite um número inteiro.

Execute a procedure prc_numero_descricao passando o número inteiro digitado pelo usuário.

Resgate o valor de retorno (parâmetro 2) da procedure e exiba-o na tela.

56

Page 57: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Design pattern DAO/VO

57

Page 58: Capítulo 11. Java Data Base Conectivity  Introdução  Pacote java.sql  Abrindo e fechando conexões  Operações na base de dados  Operações parametrizadas

Projeto Final

58