• Nenhum resultado encontrado

jdbc

N/A
N/A
Protected

Academic year: 2021

Share "jdbc"

Copied!
28
0
0

Texto

(1)

Curso de Java

Acesso a banco de dados

através de JDBC

(2)

Java e SGBD’s

• SQL é a linguagem padrão para acesso a banco de dados e se estabeleceu como tal no mercado.

• SQL no entanto não é adequada para o desenvolvimento de aplicações e na prática é dependente de SGDB e de

plataforma.

• Java, assim como outras linguagens de programação oferece mecanismos para acesso a bases de dados através de SQL.

• Em Java, esse mecanismo é chamado de JDBC: Java DataBase Connectivity.

• O mecanismo JDBC segue as premissas da linguagem Java de independência de plataforma e se propõe a ser independente

(3)

Java e JDBC

• O acesso a uma base de dados através de JDBC se

baseia em dois elementos:

• O pacote java.sql que contém as classes que

permitem o acesso ao banco de dados pela

aplicação.

aplicação.

• O driver para acesso ao banco de dados a ser

utilizado.

Para que um SGBD seja utilizado via JDBC é necessário que o mesmo tenha um driver JDBC específico, que é carregado durante a execução da aplicação. A maioria dos SGBD’s oferece drivers para JDBC.

(4)

Java e JDBC

Aplicação

Java

Java.sql

JVM

Máquina Virtual Java

Java.sql

Driver SQLServer Driver SQLServer Driver SQLServer

(5)

Carga do Driver

• O driver para o SGBD em uso deve ser

carregado dinamicamente pela aplicação. O

código abaixo apresenta o padrão de usado

para carregar o driver.

...

/** nome da classe que contém o driver a ser utilizado **/ static String driverName = "org.postgresql.Driver";

static String driverName = "org.postgresql.Driver"; ... try { Class.forName(driverName);// } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); ... }

(6)

O objeto Connection

• O objeto Connection é utilizado para

‘conectar’ a aplicação a uma base de dados.

Uma sessão típica de acesso a uma base de

dados segue o padrão abaixo.

...

// estabelecimento da conexão

Connection con = DriverManager.getConnection(

url, // caminho de acesso ao SGBD url, // caminho de acesso ao SGBD userid, // login

password // senha );

...

// uso da conexão p/ acesso ao SGBD (select, update,etc) // todo acesso ao SGBD se baseia no objeto conexão.

... ...

(7)

O objeto Statement

• O objeto Statement é utilizado para a

execução de comandos SQL através do driver

da base de dados. Os comandos SQL são

passados ao objeto Statement como strings.

...

String createString = "create table Alunos (" + "Aluno_ID INTEGER," + "Aluno_ID INTEGER," + "Aluno_nome VARCHAR(30)," + "Aluno_RG VARCHAR(15)" + ")"; ... try { Statement stmt = con.createStatement(); stmt.executeUpdate(createString); stmt.close(); } catch(SQLException ex) { ... }

(8)

O objeto Statement

• O objeto Statement suporta os métodos

• executeUpdate(): usado para operações que

causam alteração na base de dados (create,

update, insert, etc.)

• executeQuery(): usado em operações de consulta

• executeQuery(): usado em operações de consulta

(9)

O objeto Statement - outro exemplo

• Neste exemplo o objeto Statement é utilizado para inserção de dados na base de dados.

String insertString = "insert into Alunos values” +

”(01,’José da Silva’,’44.444.444’)”; try{ try{ Statement stmt = con.createStatement(); stmt.executeUpdate(insertString); stmt.close(); }catch(Exception ex){ … }

(10)

O objeto ResultSet

• O objeto ResultSet é uma estrutura de objetos que mantém os dados resultantes de uma consulta à base de dados.

• Além dos dados relativos à consulta, o objeto ResultSet contém metadados que descrevem o resultado obtido.

• O método executeQuery(), do objeto Statement retorna um objeto ResultSet.

String selectString = "select * from Alunos"; try{ try{ Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(selectString); while (rs.next()) { int id = rs.getInt("Aluno_ID");

String nome = rs.getString("Aluno_nome"); String rg = rs.getString("Aluno_RG");

System.out.println("id:"+id+" nome:"+nome+" rg:"+rg); }

con.close();

(11)

O objeto ResultSet

• No exemplo anterior, a ‘navegação’ pelo objeto ResultSet é feita através do método next(). Outros métodos disponíveis:

• previous() • first()

• last() • last()

• O acesso às colunas de uma linha do ResultSet é feito através dos métodos

• getInt(nomeDaColuna) • getString(nomeDaColuna)

• Outros métodos disponíveis para outros tipos de dados Java ‘mapeáveis’ para os tipos SQL.

(12)

Os tipos possíveis de ResultSet

• Um objeto ResultSet pode ser de um dos tipos abaixo. Cada um desses tipos oferecem diferentes recursos de ‘navegação’ sobre o resultado da consulta.

• TYPE_FORWARD_ONLY

• TYPE_SCROLL_INSENSITIVE

• TYPE_SCROLL_SENSITIVE

• TYPE_SCROLL_SENSITIVE

• O tipo do ResultSet é definido ao se criar o objeto Statement.

... Statement stmt = com.createStatement( ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY ); ...

(13)

O objeto PreparedStatement

• Um objeto PreparedStatement contém um comando SQL ‘parametrizável’.

• Os parâmetros aparecem no comando como ‘?’ e são substituídos conforme sua posição no comando.

String updateString =

"update Alunos set Aluno_nome = ? where Aluno_Id = ?";

try {

PreparedStatement pstmt = con.prepareStatement (updateString); pstmt.setInt(2, id);//os índices começam com 1

pstmt.setString(1, nome);

int k = pstmt.executeUpdate();

pstmt.close();

(14)

JDBC na prátia

• JDBC cumpre seus objetivos no sentido de prover um

mecanismo de acesso a bases de dados independente de plataforma e de SGBD.

• Os problemas de incompatibilidade que em geral ocorrem se devem a diferenças na implementação da linguagem SQL entre devem a diferenças na implementação da linguagem SQL entre os diversos SGBD.

• Como Java é orientada a objetos e SQL é voltada a ‘operações relacionais’, existe um conflito que pode ser problema às

aplicações.

• Atualmente existe uma tendência crescente no uso de

(15)

Curso de Java

Acesso a banco de dados

através de JDBC

(16)

Java e SGBD’s

• SQL é a linguagem padrão para acesso a banco de dados e se estabeleceu como tal no mercado.

• SQL no entanto não é adequada para o desenvolvimento de aplicações e na prática é dependente de SGDB e de

plataforma.

• Java, assim como outras linguagens de programação oferece mecanismos para acesso a bases de dados através de SQL.

• Em Java, esse mecanismo é chamado de JDBC: Java DataBase Connectivity.

• O mecanismo JDBC segue as premissas da linguagem Java de independência de plataforma e se propõe a ser independente

(17)

Java e JDBC

• O acesso a uma base de dados através de JDBC se

baseia em dois elementos:

• O pacote java.sql que contém as classes que

permitem o acesso ao banco de dados pela

aplicação.

aplicação.

• O driver para acesso ao banco de dados a ser

utilizado.

Para que um SGBD seja utilizado via JDBC é necessário que o mesmo tenha um driver JDBC específico, que é carregado durante a execução da aplicação. A maioria dos SGBD’s oferece drivers para JDBC.

(18)

Java e JDBC

Aplicação

Java

Java.sql

JVM

Máquina Virtual Java

Java.sql

Driver SQLServer Driver SQLServer Driver SQLServer

(19)

Carga do Driver

• O driver para o SGBD em uso deve ser

carregado dinamicamente pela aplicação. O

código abaixo apresenta o padrão de usado

para carregar o driver.

...

/** nome da classe que contém o driver a ser utilizado **/ static String driverName = "org.postgresql.Driver";

static String driverName = "org.postgresql.Driver"; ... try { Class.forName(driverName);// } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); ... }

(20)

O objeto Connection

• O objeto Connection é utilizado para

‘conectar’ a aplicação a uma base de dados.

Uma sessão típica de acesso a uma base de

dados segue o padrão abaixo.

...

// estabelecimento da conexão

Connection con = DriverManager.getConnection(

url, // caminho de acesso ao SGBD url, // caminho de acesso ao SGBD userid, // login

password // senha );

...

// uso da conexão p/ acesso ao SGBD (select, update,etc) // todo acesso ao SGBD se baseia no objeto conexão.

... ...

(21)

O objeto Statement

• O objeto Statement é utilizado para a

execução de comandos SQL através do driver

da base de dados. Os comandos SQL são

passados ao objeto Statement como strings.

...

String createString = "create table Alunos (" + "Aluno_ID INTEGER," + "Aluno_ID INTEGER," + "Aluno_nome VARCHAR(30)," + "Aluno_RG VARCHAR(15)" + ")"; ... try { Statement stmt = con.createStatement(); stmt.executeUpdate(createString); stmt.close(); } catch(SQLException ex) { ... }

(22)

O objeto Statement

• O objeto Statement suporta os métodos

• executeUpdate(): usado para operações que

causam alteração na base de dados (create,

update, insert, etc.)

• executeQuery(): usado em operações de consulta

• executeQuery(): usado em operações de consulta

(23)

O objeto Statement - outro exemplo

• Neste exemplo o objeto Statement é utilizado para inserção de dados na base de dados.

String insertString = "insert into Alunos values” +

”(01,’José da Silva’,’44.444.444’)”; try{ try{ Statement stmt = con.createStatement(); stmt.executeUpdate(insertString); stmt.close(); }catch(Exception ex){ … }

(24)

O objeto ResultSet

• O objeto ResultSet é uma estrutura de objetos que mantém os dados resultantes de uma consulta à base de dados.

• Além dos dados relativos à consulta, o objeto ResultSet contém metadados que descrevem o resultado obtido.

• O método executeQuery(), do objeto Statement retorna um objeto ResultSet.

String selectString = "select * from Alunos"; try{ try{ Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(selectString); while (rs.next()) { int id = rs.getInt("Aluno_ID");

String nome = rs.getString("Aluno_nome"); String rg = rs.getString("Aluno_RG");

System.out.println("id:"+id+" nome:"+nome+" rg:"+rg); }

con.close();

(25)

O objeto ResultSet

• No exemplo anterior, a ‘navegação’ pelo objeto ResultSet é feita através do método next(). Outros métodos disponíveis:

• previous() • first()

• last() • last()

• O acesso às colunas de uma linha do ResultSet é feito através dos métodos

• getInt(nomeDaColuna) • getString(nomeDaColuna)

• Outros métodos disponíveis para outros tipos de dados Java ‘mapeáveis’ para os tipos SQL.

(26)

Os tipos possíveis de ResultSet

• Um objeto ResultSet pode ser de um dos tipos abaixo. Cada um desses tipos oferecem diferentes recursos de ‘navegação’ sobre o resultado da consulta.

• TYPE_FORWARD_ONLY

• TYPE_SCROLL_INSENSITIVE

• TYPE_SCROLL_SENSITIVE

• TYPE_SCROLL_SENSITIVE

• O tipo do ResultSet é definido ao se criar o objeto Statement.

... Statement stmt = com.createStatement( ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY ); ...

(27)

O objeto PreparedStatement

• Um objeto PreparedStatement contém um comando SQL ‘parametrizável’.

• Os parâmetros aparecem no comando como ‘?’ e são substituídos conforme sua posição no comando.

String updateString =

"update Alunos set Aluno_nome = ? where Aluno_Id = ?";

try {

PreparedStatement pstmt = con.prepareStatement (updateString); pstmt.setInt(2, id);//os índices começam com 1

pstmt.setString(1, nome);

int k = pstmt.executeUpdate();

pstmt.close();

(28)

JDBC na prátia

• JDBC cumpre seus objetivos no sentido de prover um

mecanismo de acesso a bases de dados independente de plataforma e de SGBD.

• Os problemas de incompatibilidade que em geral ocorrem se devem a diferenças na implementação da linguagem SQL entre devem a diferenças na implementação da linguagem SQL entre os diversos SGBD.

• Como Java é orientada a objetos e SQL é voltada a ‘operações relacionais’, existe um conflito que pode ser problema às

aplicações.

• Atualmente existe uma tendência crescente no uso de

Referências

Documentos relacionados

Diferentemente do prazo fixado para pagamento dos precató- rios, as RPVs são depositadas pelos Tribunais Regionais Federais nos bancos ofi- ciais, mensalmente, obedecido o prazo de

Varr edura TCP Window ( cont inuação) ACK- win manipulado Não Responde ACK- win manipulado ICMP Tipo 3 Firewall Negando Firewall Rejeitando Scanner de Porta... Var r edur a FI N/

No 8º dia após o último comprimido de DELLAX 20 e DELLAX 30 (ou seja, após os 7 dias da semana de intervalo), inicie a fita seguinte, mesmo que a hemorragia não tenha parado.

Consoante à citação acima, destaca-se mais uma vez a contraposição de Pascal em relação ao racionalismo hegemônico no século XVII, pois, enquanto os filósofos implicados

Se algum dos efeitos secundários se agravar ou se detectar quaisquer efeitos secundários não mencionados neste folheto, informe o seu médico ou farmacêutico.. Este folheto

15.6 - Os pedidos de esclarecimentos referentes a este processo licitatório deverão ser enviados ao pregoeiro, até três dias úteis anteriores à data fixada para abertura da

Eles podem ser denominados de: (i) princípio da igual liberdade; assegura certas liberdades básicas iguais a todos os cidadãos e afirma: “Cada pessoa deve ter um

Considerando que essa despesa foi utilizada para fins de gerenciamento de resultados visando alinhá-lo a previsão dos analistas, espera-se que o efeito da mudança da ETR do quarto