2010palestrajavajdbc 150128114002 conversion gate02
DESCRIPTION
PalestraTRANSCRIPT
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010
Java JDBC Aplicao Java com Acesso a um SGBD
Ricardo Terra rterrabh [at] gmail.com
Java JDBC 1
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010
CV
Java JDBC 2
Nome: Ricardo Terra Email: rterrabh [at] gmail.com www: ricardoterra.com.br Twitter: rterrabh Lattes: lattes.cnpq.br/ 0162081093970868
Ph.D. (UFMG/UWaterloo), Post-Ph.D. (INRIA/Universit Lille 1) Background Acadmico: UFLA (desde 2014), UFSJ (1 ano), FUMEC (3 anos), UNIPAC (1 ano), FAMINAS (3 anos) Profissional: DBA Eng. (1 ano), Synos (2 anos), Stefanini (1 ano)
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 3
Conexo Java com SBGD
n No faria sentido um SGBD se no existisse a conexo entre uma linguagem de programao e um banco de dados q Em Java, existe o Java Database Connectivity (JDBC)
n 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
n JDBC direcionado a banco de dados relacionais
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 4
JDBC
n A API JDBC j est vinculada ao JDK do Java, porm necessrio baixar as API especficas para o Oracle q So conhecidas como connectors
n O connector Oracle pode ser facilmente baixado em: q http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
n O connector MySql pode ser facilmente baixado em: q http://dev.mysql.com/downloads/connector/j/
n 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
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 5
Importando Bibliotecas Externas...
n Clique com o boto direito no projeto, v em "Build Path" e depois em "Add External Archives..."
Java JDBC
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 6
Importando Bibliotecas Externas...
n Selecione a biblioteca (extenso JAR) desejada onde ela estiver
Java JDBC
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 7
Importando Bibliotecas Externas...
n Observe que a biblioteca aparecer em "Referenced Libraries"
Java JDBC
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 8
Conexo Java com SGBD
n Para exemplos, utilizaremos o seguinte modelo relacional: CONTATO (cpf, nome, sexo, data_nascimento, telefone)!! !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!
q Por didtica, todos os campos sero no-nulos (not null)
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 9
Conexo Java com Oracle
n Criao 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')) );
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 10
Conexo Java com MySql
n Criao 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')) );
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 11
JDBC
n As classes e interfaces JDBC esto contidas no pacote java.sql!
n Veremos nos prximos slides a classe e as interfaces deste pacote. q A nica classe a DriverManager que responsvel pelo
gerenciamento de conectores (connectors ou drivers)
q 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
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 12
JDBC
n Arquitetura JDBC:
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 13
JDBC java.sql.DriverManager!
n DriverManager a classe responsvel por: q Registrar o connector q Abrir conexo
n Os principais mtodos so: q registerDriver(driver: Driver) : void!
n Utilizado para o registro de um connector (ou driver). a primeira atividade a ser realizada DriverManager.registerDriver(!! !new oracle.jdbc.driver.OracleDriver());!
q getConnection(url: String, user : String, pword: String) : Connection!n 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");!
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 14
JDBC java.sql.Connection!
n Connection a interface responsvel por: q Realizar commit ou rollback de uma transao q Criar instrues
n Qualquer DML ou DDL, como insert, select, create view etc
n Os principais mtodos so: q setAutoCommit(autoCommit: boolean) : void!
n Configura se a conexo ser "auto-comitada" ou no q conn.setAutoCommit(false);
q commit() : void!n Realiza o commit da conexo
q conn.commit();!
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 15
JDBC java.sql.Connection
q rollback() : void!n Realiza o rollback da conexo
q conn.rollback();
q createStatement() : java.sql.Statement!n Cria uma instruo para que seja enviado algum SQL ao banco de dados
q Statement st = conn.createStatement();!
q prepareStatement(sql : String) : java.sql.PreparedStatement!n Cria uma instruo parametrizada para que seja enviado algum SQL ao
banco de dados n PreparedStatement ps =
conn.prepareStatement("select * from CONTATO where CPF = ?");!
q close() : void!n Realiza o encerramento da conexo. Sempre ao abrir uma conexo, a
mesma dever ser encerrada n conn.close();!
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 16
JDBC java.sql.Statement
n Statement a interface responsvel por: q Executar instrues q Realizar consultas
n Os principais mtodos so: q executeUpdate(sql : String) : int!
n Realiza a execuo de um insert, update, delete ou qualquer instruo SQL que no retorne nada, por exemplo, instrues DDL q st.executeUpdate("delete from CONTATO where SEXO='M'");
q executeQuery(sql : String) : java.sql.ResultSet!n Realiza uma consulta
q ResultSet rs = st.executeQuery("select * from CONTATO");
q close() : void!
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 17
JDBC java.sql.PreparedStatement
n PreparedStatement a interface com as mesmas responsabilidades da Statement, porm possui mtodos para inserir os parmetros
n Alguns destes mtodos de insero de parmetros: q setInt(paramIndex : int, x : int) : void!
q setLong(paramIndex : int, x : long) : void!
q setString(paramIndex : int, x : String) : void!
q setDate(paramIndex : int, x : java.sql.Date) : void!
q setNull(parameterIndex : int, sqlType : int) : void!n Ex.: ps.setNull(5, java.sql.Types.NULL);
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 18
JDBC java.sql.PreparedStatement
n Exemplo: q ...!!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();!!...!
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 19
JDBC java.sql.ResultSet
n ResultSet a interface responsvel por: q Manipular o conjunto de resultados de uma consulta
n Os principais mtodos so: q next() : boolean!
n Move o cursor para a prxima posio do conjunto de resultados, retornando um booleano dizendo se a prxima posio vlida ou no q rs.next();
q close() : void!
q Mtodos de recuperao de valores das colunas que ser abordado no prximo slide
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 20
JDBC java.sql.ResultSet
n Possui mtodos para recuperao dos valores das colunas: q Os valores podero ser recuperados pelo nome da coluna ou mesmo
pela posio em que a coluna se encontra no resultado
n Alguns destes mtodos de recuperao de valores das colunas: q getInt( [columnName : String | columnIndex : int ] ) : int!
q getLong( [columnName : String | columnIndex : int ] ) : long!
q getString( [columnName : String | columnIndex : int ] ) : String!
q getDate([columnName : String | columnIndex : int]) : java.sql.Date!n Somente a data
q getTimestamp([columnName : String | columnIndex : int]) : java.sql.Date!n Data e hora
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 21
Utilizando JDBC
n A programao usando JDBC pode ser descrita em um fluxo de atividades que ser descrita em Diagrama de Atividade da UML no prximo slide
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 22
Utilizando JDBC
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 23
JDBC - Exemplos
n Os slides a seguir apresentam alguns exemplos da utilizao do JDBC em um SGBD MySql
n Os primeiros trs exemplos esto focados na utilizao, ignorando completamente qualquer exceo que possa ocorrer
n O ltimo exemplo apresenta um tratamento de exceo adequado
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 24
Exemplos Utilizando Instruo 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(); }
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 25
Exemplos Utilizando Instruo 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(); }
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 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(); }
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 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 CDIGO EFETIVO */ conn.commit(); // realiza commit } catch (SQLException e) { System.out.println("Ocorreu uma exceo de SQL. Causa: " + e.getMessage()); if (conn != null) { // se a conexo estiver aberta try { conn.rollback(); // realiza rollback } catch (SQLException e1) { System.out.println("Exceo ao realizar rollback. Causa: " + e1.getMessage()); } } } finally { if (conn != null) { // se a conexo estiver aberta try { conn.close(); } catch (SQLException e) { System.out.println("Exceo ao fechar a conexo. Causa: " + e.getMessage()); } } } }
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 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 CDIGO EFETIVO */ conn.commit(); // realiza commit } catch (SQLException e) { System.out.println("Ocorreu uma exceo de SQL. Causa: " + e.getMessage()); if (conn != null) { // se a conexo estiver aberta try { conn.rollback(); // realiza rollback } catch (SQLException e1) { System.out.println("Exceo ao realizar rollback. Causa: " + e1.getMessage()); } } } finally { if (conn != null) { // se a conexo estiver aberta try { conn.close(); } catch (SQLException e) { System.out.println("Exceo ao fechar a conexo. 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();
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 29
Importante
n Prefira a utilizao de transaes. q Isto , opte por conn.setAutoCommit(false)!
n Encerre tudo que tiver sido aberto. q Invoque o mtodo close() de conexes, instrues e conjunto de
resultados
n Sempre faa o acesso a um banco de dados utilizando um tratamento de exceo adequado q Isto , fazer rollback em caso de erro, fechar sempre a conexo
independente de sucesso ou falha na transao etc
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010
Desenvolvendo uma Aplicao Completa
n Com toda a teoria absorvida e entendida, vamos agora criar uma aplicao Java completa com acesso uma base de dados
n Para isso, utilizaremos: q Eclipse q Oracle XE ou MySql q Connector para Oracle ou MySql q Biblioteca TerraUtil!
n Disponvel em: www.ricardoterra.com.br/palestras
n A aplicao a ser desenvolvida ser explicada nos prximo slides
Java JDBC 30
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010
Desenvolvendo uma Aplicao Completa
n 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: !
Java JDBC 31
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010
Desenvolvendo uma Aplicao Completa
1. Salvar q Pedir ao usurio todas as informaes do contato e gravar no SGBD q Retornar ao menu de opes
2. Atualizar q Pedir ao o usurio para digitar o cpf do contato
n 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
q Retornar ao menu de opes
3. Excluir q Pedir para o usurio digitar o nmero da matrcula
n Caso exista, excluir-se- e avisar ao usurio que a excluso foi efetuada com sucesso. Caso no exista, isto dever ser avisado ao usurio
q Retornar ao menu de opes
Java JDBC 32
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010
Desenvolvendo uma Aplicao Completa
4. Pesquisar q Pedir para o usurio digitar o cpf do contato q Caso exista, ir exibir as informaes do contato. Caso no exista, isto
dever ser avisado ao usurio q Retornar ao menu de opes
5. Listar q Se existir algum contato, exibir as informaes de todos. Caso no
exista nenhum, isso dever ser avisado ao usurio q Retornar ao menu de opes
6. Encerrar
q Dever encerrar o aplicativo
Java JDBC 33
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010
Desenvolvendo uma Aplicao Completa
n Teremos uma classe do tipo Contato!
n Teremos uma classe de busca de conexo (DBLocator) n Teremos um ContatoDAO!
n Teremos a classe Aplicacao!q que far toda a interao com o usurio atravs da biblioteca TerraUtil!
Java JDBC 34
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 35
Dvidas?
???
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 36
Obrigado!
Ricardo Terra rterrabh [at] gmail.com
Apresentao e projeto Java disponveis em:
www.ricardoterra.com.br/palestras
-
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2010 Java JDBC 37
Referncia Bibliogrfica
n DEITEL, H. M; DEITEL, P. J. Java, como programar. 6 ed. So Paulo: Prentice-Hall, 2005.
n DAWES, Chip; THOMAS, Biju. OCA/OCP: Introduction to Oracle9i SQL. So Francisco: Sibex, 2002.