java jdbd - aplicação java com acesso a um sgbd
Post on 12-Mar-2015
99 Views
Preview:
TRANSCRIPT
Java JDBC Aplicação Java com Acesso a um SGBD
Ricardo Terra rterrabh@gmail.com
Java JDBC: Aplicação Java com Acesso a um SGBD 2
Ricardo Terra
Mestre em Informática – PUC Minas Doutorando em Ciência da Computação – UFMG
Especializado em Java SCJP SCWCD
Professor FUMEC
Java JDBC: Aplicação Java com Acesso a um SGBD 3
Conexão Java com SBGD
Não faria sentido um SGBD se não existisse a conexão entre uma linguagem de programação e um banco de dados Em Java, existe o Java Database Connectivity (JDBC)
JDBC é uma biblioteca vinculada a API da linguagem de programação Java que define como um cliente pode acessar um banco de dados. Inclusive provê métodos para consulta e atualização
JDBC é direcionado a banco de dados relacionais
Java JDBC: Aplicação Java com Acesso a um SGBD 4
JDBC
A API JDBC já está vinculada ao JDK do Java, porém é necessário baixar as API específicas para o Oracle São conhecidas como connectors
O connector Oracle pode ser facilmente baixado em: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
O connector MySql pode ser facilmente baixado em: http://dev.mysql.com/downloads/connector/j/
O connector é a implementação das interfaces JDBC. Ela possui a extensão JAR e deve ser adicionada ao "Build Path" do projeto que a utilizará, conforme demonstrado no próximo slide
5
Importando Bibliotecas Externas...
Clique com o botão direito no projeto, vá em "Build Path" e depois em "Add External Archives..."
6
Importando Bibliotecas Externas...
Selecione a biblioteca (extensão JAR) desejada onde ela estiver
7
Importando Bibliotecas Externas...
Observe que a biblioteca aparecerá em "Referenced Libraries"
Java JDBC: Aplicação Java com Acesso a um SGBD 8
Conexão Java com SGBD
Para exemplos, utilizaremos o seguinte modelo relacional:
CONTATO (cpf, nome, sexo, data_nascimento, telefone)!! ! dom(cpf) = numérico(11) NN!! ! dom(nome) = alfabético(60) NN, com nome único!! ! dom(sexo) = char(1) NN, pode ser 'M' ou 'F'!! ! dom(data_nascimento) = data NN!! ! dom(telefone) = numérico(10) NN!
Por didática, todos os campos serão não-nulos (not null)
Java JDBC: Aplicação Java com Acesso a um SGBD 9
Conexão Java com Oracle
Criação do modelo relacional proposto no Oracle:
create table CONTATO(
CPF number(11) not null,
NOME varchar2(60) not null,
SEXO char(1) not null,
DATA_NASCIMENTO date not null,
TELEFONE number(10) not null,
constraint PK_CONTATO primary key (CPF),
constraint UN_NOME_CONTATO unique (NOME),
constraint CK_SEXO_CONTATO check (SEXO in ('M','F'))
);
Java JDBC: Aplicação Java com Acesso a um SGBD 10
Conexão Java com MySql
Criação do modelo relacional proposto no MySql:
create table CONTATO(
CPF bigint not null,
NOME varchar(60) not null,
SEXO char(1) not null,
DATA_NASCIMENTO date not null,
TELEFONE int not null,
constraint PK_CONTATO primary key (CPF),
constraint UN_NOME_CONTATO unique (NOME),
constraint CK_SEXO_CONTATO check (SEXO in ('M','F'))
);
Java JDBC: Aplicação Java com Acesso a um SGBD 11
JDBC
As classes e interfaces JDBC estão contidas no pacote java.sql!
Veremos nos próximos slides a classe e as interfaces deste pacote. A única classe é a DriverManager que é responsável pelo
gerenciamento de conectores (connectors ou drivers)
Todos os outros tipos são interfaces, pois a implementação deles encontra-se na biblioteca (connector) que foi adicionado ao projeto e que deve ser registrado pela classe DriverManager
Java JDBC: Aplicação Java com Acesso a um SGBD 12
JDBC
Arquitetura JDBC:
Java JDBC: Aplicação Java com Acesso a um SGBD 13
JDBC – java.sql.DriverManager!
DriverManager é a classe responsável por: Registrar o connector Abrir conexão
Os principais métodos são: registerDriver(driver: Driver) : void!
Utilizado para o registro de um connector (ou driver). É a primeira atividade a ser realizada DriverManager.registerDriver(!! ! new oracle.jdbc.driver.OracleDriver());!
getConnection(url: String, user : String, pword: String) : Connection! Utilizado para criar uma conexão a um SGDB. Deve ser passado a url de acesso ao
SGBD, o nome e a senha do usuário Connection conn = DriverManager.getConnection(!! "jdbc:oracle:thin:@localhost:1521:xe","user”,"pw");!
Java JDBC: Aplicação Java com Acesso a um SGBD 14
JDBC – java.sql.Connection!
Connection é a interface responsável por: Realizar commit ou rollback de uma transação Criar instruções
Qualquer DML ou DDL, como insert, select, create view etc
Os principais métodos são: setAutoCommit(autoCommit: boolean) : void!
Configura se a conexão será "auto-comitada" ou não conn.setAutoCommit(false);
commit() : void! Realiza o commit da conexão
conn.commit();!
Java JDBC: Aplicação Java com Acesso a um SGBD 15
JDBC – java.sql.Connection
rollback() : void! Realiza o rollback da conexão
conn.rollback();
createStatement() : java.sql.Statement! Cria uma instrução para que seja enviado algum SQL ao banco de dados
Statement st = conn.createStatement();!
prepareStatement(sql : String) : java.sql.PreparedStatement! Cria uma instrução parametrizada para que seja enviado algum SQL ao
banco de dados PreparedStatement ps =
conn.prepareStatement("select * from CONTATO where CPF = ?");!
close() : void! Realiza o encerramento da conexão. Sempre ao abrir uma conexão, a
mesma deverá ser encerrada conn.close();!
Java JDBC: Aplicação Java com Acesso a um SGBD 16
JDBC – java.sql.Statement
Statement é a interface responsável por: Executar instruções Realizar consultas
Os principais métodos são: executeUpdate(sql : String) : int!
Realiza a execução de um insert, update, delete ou qualquer instrução SQL que não retorne nada, por exemplo, instruções DDL st.executeUpdate("delete from CONTATO where SEXO='M'");
executeQuery(sql : String) : java.sql.ResultSet! Realiza uma consulta
ResultSet rs = st.executeQuery("select * from CONTATO");
close() : void!
Java JDBC: Aplicação Java com Acesso a um SGBD 17
JDBC – java.sql.PreparedStatement
PreparedStatement é a i n t e r f a c e c o m a s m e s m a s responsabilidades da Statement, porém possui métodos para inserir os parâmetros
Alguns destes métodos de inserção de parâmetros: setInt(paramIndex : int, x : int) : void!
setLong(paramIndex : int, x : long) : void!
setString(paramIndex : int, x : String) : void!
setDate(paramIndex : int, x : java.sql.Date) : void!
setNull(parameterIndex : int, sqlType : int) : void! Ex.: ps.setNull(5, java.sql.Types.NULL);
Java JDBC: Aplicação Java com Acesso a um SGBD 18
JDBC – java.sql.PreparedStatement
Exemplo: ...!! PreparedStatement ps = !! ! conn.prepareStatement(!! ! ! ! "insert into CONTATO values (?,?,?,?,?)");!! !! ps.setLong(1, 12345678903L);!! ps.setString(2, "Marcos");!! ps.setString(3, "M");!! ps.setDate(4, new java.sql.Date(500000000000L));!! ps.setLong(5, 3134181010L);!
! ps.executeUpdate();!! ...!
Java JDBC: Aplicação Java com Acesso a um SGBD 19
JDBC – java.sql.ResultSet
ResultSet é a interface responsável por: Manipular o conjunto de resultados de uma consulta
Os principais métodos são: next() : boolean!
Move o cursor para a próxima posição do conjunto de resultados, retornando um booleano dizendo se a próxima posição é válida ou não rs.next();
close() : void!
Métodos de recuperação de valores das colunas que será abordado no próximo slide
Java JDBC: Aplicação Java com Acesso a um SGBD 20
JDBC – java.sql.ResultSet
Possui métodos para recuperação dos valores das colunas: Os valores poderão ser recuperados pelo nome da coluna ou mesmo
pela posição em que a coluna se encontra no resultado
Alguns destes métodos de recuperação de valores das colunas: getInt( [columnName : String | columnIndex : int ] ) : int!
getLong( [columnName : String | columnIndex : int ] ) : long!
getString( [columnName : String | columnIndex : int ] ) : String!
getDate([columnName : String | columnIndex : int]) : java.sql.Date! Somente a data
getTimestamp([columnName : String | columnIndex : int]) : java.sql.Date!
Data e hora
Java JDBC: Aplicação Java com Acesso a um SGBD 21
Utilizando JDBC
A programação usando JDBC pode ser descrita em um fluxo de atividades que será descrita em Diagrama de Atividade da UML no próximo slide
Java JDBC: Aplicação Java com Acesso a um SGBD 22
Utilizando JDBC
Java JDBC: Aplicação Java com Acesso a um SGBD 23
JDBC - Exemplos
Os slides a seguir apresentam alguns exemplos da utilização do JDBC em um SGBD MySql
Os primeiros três exemplos estão focados na utilização, ignorando completamente qualquer exceção que possa ocorrer
O último exemplo apresenta um tratamento de exceção adequado
Java JDBC: Aplicação Java com Acesso a um SGBD 24
Exemplos – Utilizando Instrução Simples
public static void insert() throws SQLException { DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/dbexemplo", "root", "root"); conn.setAutoCommit(false);
Statement st = conn.createStatement(); st.executeUpdate(
"insert into CONTATO values (12345678903,'Marcos','M',to_date('04/11/1985','dd/MM/yyyy'),3132501111)"); st.close();
conn.commit(); conn.close();
}
Java JDBC: Aplicação Java com Acesso a um SGBD 25
Exemplos – Utilizando Instrução Preparada
public static void insertPreparado() throws SQLException { DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/dbexemplo", "root", "root"); conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement( "update CONTATO set NOME = ?, SEXO = ?, DATA_NASCIMENTO = ?, TELEFONE = ?" +
"where CPF = ?"); ps.setString(1, "Carla"); ps.setString(2, "F");
ps.setDate(3, new java.sql.Date(500000000000L)); ps.setLong(4, 3132501111L); ps.setLong(5, 12345678904L); ps.executeUpdate();
ps.close();
conn.commit(); conn.close(); }
Java JDBC: Aplicação Java com Acesso a um SGBD 26
Exemplos – Conjunto de Resultados
public static void select() throws SQLException { DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/dbexemplo", "root", "root"); conn.setAutoCommit(false);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("select * from CONTATO"); while (rs.next()) { System.out.println("CPF: " + rs.getLong("CPF")); System.out.println("NOME: " + rs.getString("NOME"));
System.out.println("SEXO: " + rs.getString("SEXO")); System.out.println("DATA DE NASCIMENTO: " + rs.getDate("DATA_NASCIMENTO")); System.out.println("TELEFONE: " + rs.getLong("TELEFONE"));
System.out.println("========================================"); }
rs.close(); st.close(); conn.commit();
conn.close(); }
Java JDBC: Aplicação Java com Acesso a um SGBD 27
Exemplos – Bloco Transacional
public static void blocoTransacional() { Connection conn = null; try { DriverManager.registerDriver(new com.mysql.jdbc.Driver()); conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/dbexemplo", "root", "root"); conn.setAutoCommit(false);
/* AQUI VEM O CÓDIGO EFETIVO */ conn.commit(); // realiza commit } catch (SQLException e) { System.out.println("Ocorreu uma exceção de SQL. Causa: " + e.getMessage()); if (conn != null) { // se a conexão estiver aberta try { conn.rollback(); // realiza rollback } catch (SQLException e1) { System.out.println("Exceção ao realizar rollback. Causa: " + e1.getMessage()); } } } finally { if (conn != null) { // se a conexão estiver aberta try { conn.close(); } catch (SQLException e) { System.out.println("Exceção ao fechar a conexão. Causa: " + e.getMessage()); } } } }
Java JDBC: Aplicação Java com Acesso a um SGBD 28
Exemplos – Bloco Transacional
public static void blocoTransacional() { Connection conn = null; try { DriverManager.registerDriver(new com.mysql.jdbc.Driver() ()); conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/dbexemplo", "root", "root"); conn.setAutoCommit(false);
/* AQUI VEM O CÓDIGO EFETIVO */ conn.commit(); // realiza commit } catch (SQLException e) { System.out.println("Ocorreu uma exceção de SQL. Causa: " + e.getMessage()); if (conn != null) { // se a conexão estiver aberta try { conn.rollback(); // realiza rollback } catch (SQLException e1) { System.out.println("Exceção ao realizar rollback. Causa: " + e1.getMessage()); } } } finally { if (conn != null) { // se a conexão estiver aberta try { conn.close(); } catch (SQLException e) { System.out.println("Exceção ao fechar a conexão. Causa: " + e.getMessage()); } } } }
PreparedStatement ps =
conn.prepareStatement( "insert into CONTATO values (?,?,?,?,?)");
ps.setLong(1, 12345678905L); ps.setString(2, "Clodovil");
ps.setString(3, "I"); ps.setDate(4, new java.sql.Date(500000000000L)); ps.setLong(5, 3132501111L);
ps.executeUpdate(); ps.close();
Java JDBC: Aplicação Java com Acesso a um SGBD 29
Importante
Prefira a utilização de transações. Isto é, opte por conn.setAutoCommit(false)!
Encerre tudo que tiver sido aberto. Invoque o método close() de conexões, instruções e conjunto de
resultados
Sempre faça o acesso a um banco de dados utilizando um tratamento de exceção adequado Isto é, fazer rollback em caso de erro, fechar sempre a conexão
independente de sucesso ou falha na transação etc
Desenvolvendo uma Aplicação Completa
Com toda a teoria absorvida e entendida, vamos agora criar uma aplicação Java completa com acesso à uma base de dados
Para isso, utilizaremos: Eclipse Oracle XE ou MySql Connector para Oracle ou MySql Biblioteca TerraUtil!
Disponível em: www.ricardoterra.com.br/palestras
A aplicação a ser desenvolvida será explicada nos próximo slides
Java JDBC: Aplicação Java com Acesso a um SGBD 30
Desenvolvendo uma Aplicação Completa
Inicialmente, o usuário poderá escolher dentre uma das opções abaixo. Cada opção será implementada em um método específico
========================! CADASTRO DE CONTATOS !========================!1 – SALVAR!2 – ATUALIZAR!3 – EXCLUIR!4 – PESQUISAR!5 – LISTAR!6 – ENCERRAR! !DIGITE A OPÇÃO DESEJADA: !
Java JDBC: Aplicação Java com Acesso a um SGBD 31
Desenvolvendo uma Aplicação Completa
1. Salvar Pedirá ao usuário todas as informações do contato e gravará no SGBD Retornará ao menu de opções
2. Atualizar Pedirá ao o usuário para digitar o cpf do contato
Caso exista, pedirá todas as informações do contato novamente – com a exceção do cpf – e atualizará no SGBD. Caso não exista, isso deverá ser avisado ao usuário
Retornará ao menu de opções
3. Excluir Pedirá para o usuário digitar o número da matrícula
Caso exista, excluir-se-á e avisará ao usuário que a exclusão foi efetuada com sucesso. Caso não exista, isto deverá ser avisado ao usuário
Retornará ao menu de opções
Java JDBC: Aplicação Java com Acesso a um SGBD 32
Desenvolvendo uma Aplicação Completa
4. Pesquisar Pedirá para o usuário digitar o cpf do contato Caso exista, irá exibir as informações do contato. Caso não exista, isto
deverá ser avisado ao usuário Retornará ao menu de opções
5. Listar Se existir algum contato, exibirá as informações de todos. Caso não
exista nenhum, isso deverá ser avisado ao usuário Retornará ao menu de opções
6. Encerrar Deverá encerrar o aplicativo
Java JDBC: Aplicação Java com Acesso a um SGBD 33
Desenvolvendo uma Aplicação Completa
Teremos uma classe do tipo Contato!
Teremos uma classe de busca de conexão (DBLocator)
Teremos um ContatoDAO!
Teremos a classe Aplicacao! que fará toda a interação com o usuário através da biblioteca TerraUtil!
Java JDBC: Aplicação Java com Acesso a um SGBD 34
Java JDBC: Aplicação Java com Acesso a um SGBD 35
Dúvidas?
???
Java JDBC: Aplicação Java com Acesso a um SGBD 36
Obrigado!
Ricardo Terra rterrabh@gmail.com
Apresentação e fontes disponíveis em: www.ricardoterra.com.br/palestras
Java JDBC: Aplicação Java com Acesso a um SGBD 37
Referência Bibliográfica
DEITEL, H. M; DEITEL, P. J. Java, como programar. 6 ed. São Paulo: Prentice-Hall, 2005.
DAWES, Chip; THOMAS, Biju. OCA/OCP: Introduction to Oracle9i™ SQL. São Francisco: Sibex, 2002.
top related