Documente Academic
Documente Profesional
Documente Cultură
Ricardo Terra
Mestre em Informtica PUC Minas Doutorando em Cincia da Computao UFMG Especializado em Java SCJP SCWCD Professor FUMEC
No faria sentido um SGBD se no existisse a conexo entre uma linguagem de programao e um banco de dados
JDBC uma biblioteca vinculada a API da linguagem de programao Java que define como um cliente pode acessar um banco de dados. Inclusive prov mtodos para consulta e atualizao JDBC direcionado a banco de dados relacionais
JDBC
A API JDBC j est vinculada ao JDK do Java, porm necessrio baixar as API especficas para o Oracle
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
http://dev.mysql.com/downloads/connector/j/
O connector a implementao das interfaces JDBC. Ela possui a extenso JAR e deve ser adicionada ao "Build Path" do projeto que a utilizar, conforme demonstrado no prximo slide
Clique com o boto direito no projeto, v em "Build Path" e depois em "Add External Archives..."
dom(cpf) = numrico(11) NN! dom(nome) = alfabtico(60) NN, com nome nico! dom(sexo) = char(1) NN, pode ser 'M' ou 'F'! dom(data_nascimento) = data NN! dom(telefone) = numrico(10) NN!
Por didtica, todos os campos sero no-nulos (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')) );
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')) );
10
JDBC
As classes e interfaces JDBC esto contidas no pacote java.sql! Veremos nos prximos slides a classe e as interfaces deste pacote.
A nica classe a DriverManager que responsvel pelo gerenciamento de conectores (connectors ou drivers) Todos os outros tipos so interfaces, pois a implementao deles encontra-se na biblioteca (connector) que foi adicionado ao projeto e que deve ser registrado pela classe DriverManager
11
JDBC
Arquitetura JDBC:
12
JDBC java.sql.DriverManager!
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 conexo a um SGDB. Deve ser passado a url de acesso ao SGBD, o nome e a senha do usurio Connection conn = DriverManager.getConnection(! ! "jdbc:oracle:thin:@localhost:1521:xe","user,"pw");!
13
JDBC java.sql.Connection!
setAutoCommit(autoCommit: boolean) : void! Configura se a conexo ser "auto-comitada" ou no conn.setAutoCommit(false); commit() : void! Realiza o commit da conexo conn.commit();!
14
JDBC java.sql.Connection
rollback() : void! Realiza o rollback da conexo conn.rollback(); createStatement() : java.sql.Statement! Cria uma instruo para que seja enviado algum SQL ao banco de dados Statement st = conn.createStatement();! prepareStatement(sql : String) : java.sql.PreparedStatement! Cria uma instruo parametrizada para que seja enviado algum SQL ao banco de dados
close() : void! Realiza o encerramento da conexo. Sempre ao abrir uma conexo, a mesma dever ser encerrada
JDBC java.sql.Statement
executeUpdate(sql : String) : int! Realiza a execuo de um insert, update, delete ou qualquer instruo SQL que no retorne nada, por exemplo, instrues DDL
close() : void!
Java JDBC: Aplicao Java com Acesso a um SGBD 16
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, porm possui mtodos para inserir os parmetros Alguns destes mtodos de insero de parmetros:
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);
17
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();! ...!
18
JDBC java.sql.ResultSet
next() : boolean!
Move o cursor para a prxima posio do conjunto de resultados, retornando um booleano dizendo se a prxima posio vlida ou no
rs.next();
close() : void! Mtodos de recuperao de valores das colunas que ser abordado no prximo slide
19
JDBC java.sql.ResultSet
Os valores podero ser recuperados pelo nome da coluna ou mesmo pela posio em que a coluna se encontra no resultado
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
20
Utilizando JDBC
A programao usando JDBC pode ser descrita em um fluxo de atividades que ser descrita em Diagrama de Atividade da UML no prximo slide
21
Utilizando JDBC
22
JDBC - Exemplos
Os slides a seguir apresentam alguns exemplos da utilizao do JDBC em um SGBD MySql Os primeiros trs exemplos esto focados na utilizao, ignorando completamente qualquer exceo que possa ocorrer O ltimo exemplo apresenta um tratamento de exceo adequado
23
24
25
26
27
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); public static void blocoTransacional() { ps.executeUpdate(); Connection conn = null; ps.close(); try { DriverManager.registerDriver(new com.mysql.jdbc.Driver() ()); conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/dbexemplo", "root", "root"); conn.setAutoCommit(false);
28
Importante
Isto , fazer rollback em caso de erro, fechar sempre a conexo independente de sucesso ou falha na transao etc
29
Com toda a teoria absorvida e entendida, vamos agora criar uma aplicao Java completa com acesso uma base de dados Para isso, utilizaremos: Eclipse Oracle XE ou MySql Connector para Oracle ou MySql Biblioteca TerraUtil!
30
Inicialmente, o usurio poder escolher dentre uma das opes abaixo. Cada opo ser implementada em um mtodo especfico
========================! CADASTRO DE CONTATOS ! ========================! 1 SALVAR! 2 ATUALIZAR! 3 EXCLUIR! 4 PESQUISAR! 5 LISTAR! 6 ENCERRAR! ! DIGITE A OPO DESEJADA: !
31
Salvar Pedir ao usurio todas as informaes do contato e gravar no SGBD Retornar ao menu de opes Atualizar Pedir ao o usurio para digitar o cpf do contato
2.
Caso exista, pedir todas as informaes do contato novamente com a exceo do cpf e atualizar no SGBD. Caso no exista, isso dever ser avisado ao usurio
3.
Caso exista, excluir-se- e avisar ao usurio que a excluso foi efetuada com sucesso. Caso no exista, isto dever ser avisado ao usurio
Pesquisar Pedir para o usurio digitar o cpf do contato Caso exista, ir exibir as informaes do contato. Caso no exista, isto dever ser avisado ao usurio Retornar ao menu de opes Listar Se existir algum contato, exibir as informaes de todos. Caso no exista nenhum, isso dever ser avisado ao usurio Retornar ao menu de opes Encerrar Dever encerrar o aplicativo
5.
6.
33
Teremos uma classe do tipo Contato! Teremos uma classe de busca de conexo (DBLocator) Teremos um ContatoDAO! Teremos a classe Aplicacao!
34
Dvidas?
???
Java JDBC: Aplicao Java com Acesso a um SGBD 35
Obrigado!
Ricardo Terra rterrabh@gmail.com Apresentao e fontes disponveis em: www.ricardoterra.com.br/palestras
36
Referncia Bibliogrfica
DEITEL, H. M; DEITEL, P. J. Java, como programar. 6 ed. So Paulo: Prentice-Hall, 2005. DAWES, Chip; THOMAS, Biju. OCA/OCP: Introduction to Oracle9i SQL. So Francisco: Sibex, 2002.
37