Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Acesso a banco de dados com JDBC

1,571 views

Published on

Published in: Technology
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Acesso a banco de dados com JDBC

  1. 1. Acesso a Banco de DadosJDBCTécnicas de ProgramaçãoFA7Prof.º Eduardo Mendes
  2. 2. Trabalhandocom Banco de Dados  Nesta aula  Criar um banco de dados e uma tabela de alunos  Configurar a aplicação para acessar o banco dedados  JNDI, server.xml, web.xml  Criar uma classe que acesse o banco com aconfiguração realizada
  3. 3. Conceitos  Tabelas  Linhas  Campos  Chaves primárias
  4. 4. Tabela típica de dados:Agenda Telefônica
  5. 5. Cursos da FA7
  6. 6. No MySQLCREATE DATABASE modulo3;USE modulo3;CREATE TABLE agendaTelefonica (id INT PRIMARY KEY,primeiroNome VARCHAR(15),sobreNome VARCHAR (15),email VARCHAR(20),telefone VARCHAR(15));DESCRIBE agendaTelefonica;
  7. 7. Inserindo ValoresINSERT INTO agendaTelefonicaVALUES(0, ‘Eduardo, ‘Mendes,‘eduardo@fa7.edu.br, 123567‘);
  8. 8. Recuperando os dados  Eu quero visualizar todos os registrode uma tabelaSELECT * FROM nomeDaTabela;
  9. 9. No MySQLSELECT * FROM agendaTelefonica;
  10. 10. Java Database Connectivity  Conectividade a Bancos de Dados Java  Biblioteca  Acesso a bancos de dados por meio de Java  Desenvolvedores podem acessar bancos de dadosnão importando quem é o distribuidor  Utilização de “driver”
  11. 11. Java Name and Directory InterfaceJNDIAPI Java padrãopara acessardiretóriosLocalcentralizadoAplicação Javapode recuperarrecursosexternos atravésde um nome
  12. 12. Java Name and Directory Interface  Principais estruturas:  Principal método de Context:lookup(“[recurso]”)
  13. 13. Configurando o acesso ao bancovia JNDI  Instale o driver JDBC do MySQL na pasta lib doTomcat  Configure um nome JNDI para o banco de dadosque aplicação deve acessar no arquivo server.xmldo tomcat.  Este arquivo se encontra na pasta conf  Configure sua aplicação para acessar o recursoJNDI.  Faça isto no web.xml
  14. 14. Instalando o driver
  15. 15. Configurando o server.xml<Context docBase="16102008" path="/16102008"reloadable="true"source="org.eclipse.jst.j2ee.server:16102008" ><Resource name="jdbc/fa7"auth="Container"type="javax.sql.DataSource“maxActive="100" maxIdle="30" maxWait="10000“username="root" password=""driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/fa7"/></Context>
  16. 16. Configurando o web.xml<resource-ref><description>DB Connection</description><res-ref-name>jdbc/fa7</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth></resource-ref>
  17. 17. Preparando uma classe paraacessar o Banco de Dados  Crie uma classe chamada AlunoDAO, no pacotedao  DAO – Data Access Object  Dentro da classe crie um método chamado:  public void getAlunos() throws Exception
  18. 18. getAlunos()Context initCtx = null;Context envCtx = null;DataSource ds = null;Connection conn = null;Statement stmt = null;ResultSet rs = null;initCtx = new InitialContext();envCtx = (Context) initCtx.lookup("java:comp/env");
  19. 19. JDBCPrincipais Classes  javax.sql.DataSource  Abrange os detalhes de como obter uma conexão para obanco de dados  java.sql.Connection  Representa uma conexão com um banco de dados  java.sql.Statement  Fornece métodos para o desenvolvedor executar instruçõesSQL  java.sql.ResultSet  Representa o resultado de uma instrução SQL de Pesquisa
  20. 20. javax.sql.DataSource  Uma interface definida na API  Modo recomendado para um desenvolvedor obterum objeto Connection  Após obter uma instância de DataSource  É possível recuperar o objeto Connection  Como?  Chamar o método getConnection() em uma instânciade DataSource
  21. 21. Recuperando DataSource  O contexto JNDI abstrai os detalhes de conexãocom o recurso  Utilize o nome com o qual DataSource foiconfiguradods = (DataSource) envCtx.lookup("jdbc/fa7");  Uma vez que se tenha uma instância DataSourceválida, obter uma conexão é:Connection conn = ds.getConnection();
  22. 22. Obtendo um DataSourcee a conexãoinitCtx = new InitialContext();envCtx = (Context) initCtx.lookup("java:comp/env");ds = (DataSource) envCtx.lookup("jdbc/fa7");conn = ds.getConnection();
  23. 23. java.sql.Connection  Objetos da classe java.sql.Connection  Representam conexões atuais para o banco dedados  A partir deste objeto é possível criar a classeStatement
  24. 24. Obtendo um objeto StatementinitCtx = new InitialContext();envCtx = (Context) initCtx.lookup("java:comp/env");ds = (DataSource) envCtx.lookup("jdbc/fa7");conn = ds.getConnection();stmt = conn.createStatement();
  25. 25. java.sql.Statement  Métodos  executeQuery  Executa comandos SELECT, retornando o resultadode operações como um objeto ResultSet  executeUpdate  Executa comandos INSERT, UPDATE ou DELETE,retornando o número de colunas afetadas como umtipo int
  26. 26. Executando uma consultainitCtx = new InitialContext();envCtx = (Context) initCtx.lookup("java:comp/env");ds = (DataSource) envCtx.lookup("jdbc/fa7");conn = ds.getConnection();stmt = conn.createStatement();rs = stmt.executeQuery("SELECT * FROM alunos");
  27. 27. java.sql.ResultSet  Resultados de uma consulta no banco de dados  Um objeto ResultSet pode ser visualizado comouma tabela  A informação é recuperada uma linha por vez  O objeto ResultSet mantém a linha corrente  Para percorrer as linhas da tabela em ResultSet,usamos o método next()
  28. 28. Percorrendo os resultadosrs = stmt.executeQuery("SELECT * FROM alunos");while (rs.next()) {String alunoNome = rs.getString("nome");int alunoIdade = rs.getInt("idade");int alunoId = rs.getInt("id");System.out.println(alunoId);System.out.println(alunoNome);System.out.println(alunoIdade);}
  29. 29. Liberando Recursos do Sistema  Este é um passo muito importante quefreqüentemente é negligenciado após ter sidocompletada  Deve ser feita explicitamente e é umaresponsabilidade do programador  Sem executar tal liberação, os recursos tomadospela operação não podem ser usadas no futuro  Para aplicações muito grandes, isto rapidamenteresulta na perda de conexões disponíveis
  30. 30. Liberando Recursos do Sistema  Executada chamando o método close() disponíveis emcada objeto das classes Connection, Statement, eResultSet  Existem uma ordem específica envolvida  O método close está definido para lançar umaSQLException  Erros comuns dos desenvolvedores: colocarsimplesmente os métodos dentro do corpo do programa  Somente recorrer a condições de bem sucedidas  O código deve ser colocado dentro de uma cláusulafinally
  31. 31. Liberando Recursos do Sistema} finally {try {if (rs != null)rs.close();} catch (SQLException e) {}try {if (stmt != null)stmt.close();} catch (SQLException e) {}try {if (conn != null)conn.close();} catch (SQLException e) {}}
  32. 32. Prepared Statement  Classe que deriva de Statement  Tem performance melhor  Uma consulta pré-compilada  O Banco de Dados executa direto, sem ter quecompilar  É preferível usá-la quando a consulta deve serusada mais que uma vez
  33. 33. Criando um ObjetoPreparedStatement  Cria-se através de uma conexão, assim como oStatement  Parâmetros são fornecidos em forma de “?”  Posteriormente serão substituídos por valores
  34. 34. Criando um ObjetoPreparedStatementPreparedStatement teste =conn.prepareStatement(“UPDATE alunos SET nome = ? WHERE id = ?”);
  35. 35. Fornecendo os valores daconsulta  Os valores representados por “?” devem serinformados  Métodos setXXX  Para int, setInt()  Para String setString()  Existe um método para cada tipo primitivodeclarado na linguagem JAVA
  36. 36. Fornecendo os valores daconsultaPreparedStatement teste =conn.prepareStatement(“UPDATE alunos SET nome = ? WHERE id= ?”);teste.setString(1, “Dudu”);teste.setInt(2, 1);
  37. 37. Como executar a consulta?PreparedStatement teste =conn.prepareStatement(“UPDATE alunos SET nome = ? WHERE id= ?”);teste.setString(1, “Dudu”);teste.setInt(2, 1);teste.executeUpdate();
  38. 38. Usando um laço para alterarPreparedStatement alterarAlunos;String alterarString =“UPDATE alunos SET nome = ? WHERE id = ?";alterarAlunos = conn.prepareStatement(alterarString);int [] alunosIds= {175, 150, 60, 155, 90};String [] nomes = {“Eduardo", “Gustavo", “Odmir",“Fernando", “Raphabs"};int len = nomes.length;for(int i = 0; i < len; i++) {alterarAlunos.setInt(1, alunosIds[i]);alterarAlunos.setString(2, nomes[i]);alterarAlunos.executeUpdate();}
  39. 39. Transações  Algumas vezes é necessário que certas consultassó executem caso outras tenham sucesso  Uma transação pode ser vista como um conjuntode consultas dependentes
  40. 40. Transaçõescon.setAutoCommit(false);PreparedStatement alterarAluno =con.prepareStatement( "UPDATE alunos SET nome = ?WHERE id = ?");alterarAluno.setInt(1,”Dudu”);alterarAluno.setString(2, 1);alterarAluno.executeUpdate();PreparedStatement alterarIdade =con.prepareStatement( "UPDATE alunos SET idade = idade+ ? WHERE id LIKE ?");alterarIdade.setInt(1, 1);alterarIdade.setString(2, 1);alterarIdade.executeUpdate();con.commit();con.setAutoCommit(true);

×