5 JDBC Java Database Connectivity Prof. Autor: Daniel Morais dos Reis e-tec Brasil Programação Avançada Para Web Página1
Meta Trabalhar com bancos de dados em aplicações web em JSP através das classes JDBC Objetivos Ao final desta aula, você deverá ser capaz de: Entender os principais aspectos de aplicações em camadas com bancos de dados. Página2
1 Interação entre bancos de dados e JSP As classes Java para trabalhar com bancos de dados estão dentro da JDBC (Java Database Connectivity) conforme foi visto na disciplina de Linguagens de Programação II. Para trabalhar com bancos de dados em Java como foi visto na disciplina de Linguagens de Programação II, são necessários 3 objetos: Connection Responsável por carregar os dados da conexão com o banco de dados; Statemente Executa comandos SQL no banco de dados; ResultSet Armazena dados retornados por Statements depois de executar comandos SQL (mais comumente utilizado após ser executado um comando select no banco de dados); Iremos desta quinzena até a quinzena 8 desenvolver um sistema de cadastro de nomes e telefones de alunos bastante simples utilizado banco de dados mas que nos possibilitará abordar diversos recurso da linguagem Java/JSP. Será necessário também que você se lembre dos comandos SQL aprendidos na disciplina de Bancos de Dados, portanto em caso de dúvidas recorra ao material desta disciplina. Crie no seu servidor de banco de dados MySQL um banco de dados aula, dentro deste banco de dados a tabela a seguir: Tabela Aluno Campo Idaluno Nome Telefone Propriedades Int, not null, primary key, autoincrement Varchar(100) Varchar(20) Página3 Lembre do endereço ip de seu servidor (caso o MySQL esteja instalado em sua própria máquina, você pode usar o endereço localhost ), seu usuário e senha de acesso a este banco de dados (tipicamente o usuário root). Cadastre na tabela Aluno 3 registros de alunos (nome e telefone).
Crie um novo projeto Java Web com o Netbeans IDE (em caso de dúvidas consulte a quinzena 2). Para trabalhar com o banco de dados MySQL é necessário que em seu projeto seja configurado o driver JDBC do MySQL. Para fazer isso, clique com o botão direto do mouse na pasta bibliotecas de seu projeto na guia projetos do Netbeans e selecione Adicionar biblioteca conforme a figura a seguir. Página4
Na janela Adicionar Biblioteca que surge, selecione Driver JDBC do MySQL conforme mostra a figura a seguir. Página5
Seu projeto, em sua guia de projetos deve estar com sua pasta bibliotecas agora da forma como mostra a figura a seguir. Página6 Vamos agora conectar o projeto ao banco de dados criado anteriormente por você, recuperar os registros dos alunos e exibi-los em uma página web de seu navegador. Para isso, altere o código de seu arquivo index.jsp para o código da imagem a seguir.
Página7 Repare nas linhas 7-11 que são importadas as classes necessárias para trabalhar com bancos de dados em Java (tipicamente dizemos classes JDBC Java Database Connectivity). Na linha 20 é criado um título que aparece na página, dentro da janela do navegador com o tag <h1>, na linha 21 é criado um link para uma futura página que fará a inserção de novos registros em seu banco de dados. Na linha 25 inicia-se um Scriplet que contém os comandos necessários para conexão ao seu banco de dados. A maior parte dos comandos para acesso à bancos de dados podem lançar exceções (erros que quando tratados não fazem o software travar por exemplo, servidor de banco de dados inexistente, nome do banco de dados incorreto, usuário ou senha para acesso ao servidor de bancos de dados incorretos). Por isso na linha 26 é iniciado um comando try (tentar do inglês), na linha 42 em caso de problemas ou exceções, estas exceções serão armazenadas no objeto e, o qual pode ser utilizado para a resolução do problema. Em caso de dúvidas sobre tratamentos de exceções consulte o material da disciplina de Linguagens de Programação II. Para se conectar a um banco de dados em Java, são necessárias 3 operações básicas. São elas
Registrar o driver do banco de dados, esta operações é feita na linha 27 através do método forname do objeto Class. Ao aplicar o método Class.forName e fornecer a String com o caminho para o driver de banco de dados, este ficará disponível para uso na memória do computador e o deixa disponível para ser utilizado pela classe DriverManager. Criar uma conexão, uma conexão (Connection) contém os dados necessários para acesso ao banco de dados. Ela contém dados como endereço do servidor de banco de dados, nome do banco de dados, usuário e senha para acesso. Para uma Connection ser criada, seu dados devem ser informados no método getconnection da classe DriverManager, o qual usuário o driver de banco de dados registrado anteriormente e através dos dados de acesso criará este objeto. Este procedimento é feito na linha 29. A figura a seguir exibe os locais onde você deve colocar o endereço do seu servidor de banco de dados, o nome do banco de dados a ser acessado, o usuário e a senha para acesso. Criar um Statement que é um objeto necessário para executar comandos no banco de dados. Ele é criado por uma Connection e após isso pode interagir com o banco de dados através de comandos SQL. Este procedimento é feito na linha 30. Opcionalmente, caso você faça a busca por registros em seu banco de dados (quando por exemplo utilizando o comando da linguagem SQL select), estes dados são retornados pelo banco de dados em um objeto do tipo ResultSet. Um ResultSet pode ser comparado a uma tabela que contém dados sobre os registros retornados pela consulta SQL. Imagine que após executar um comando SQL na linha 30, fossem retornados do banco de dados 2 registros, o ResultSet seria equivalente à tabela da figura a seguir. Página8 Um cursor deve ser posicionado na linha do ResultSet que se deseja, após posicionar o cursor, o dado da linha pode ser recuperado. Sempre que você faz uma consulta SQL, o ResultSet retornado inicia com o cursor posicionado na linha de títulos da tabela, para
avançar para uma linha com registros, deve-se utilizar um dos métodos abaixo dependendo da situação Método first() last() previous() next() Função Vai para a primeira linha de dados do ResultSet Vai para a última linha de dados do ResultSet Vai para a linha de dados anterior à atual do ResultSet Vai para a próxima linha de dados do ResultSet Após posicionar o cursor adequadamente na linha desejada do ResultSet, você deve recuperar a informação desejada campo a campo através do método gettipo_de_dado, onde TIPO_DE_DADO é um tipo de dados Java, como int, String, double, etc. Por exemplo, para pegar o telefone da aluna Maria, deve-se usar o comando rs.last() para posicionar o cursor na última linha de dados, após isso, para pegar o telefone, use o comando rs.getstring( telefone ) e será retornada uma String com o número de telefone desejado. Nas linhas 22-23 é criada uma tabela para ser mostrada na página com tags HTML. O tag <table> inicia uma nova tabela, o tag <tr> cria uma linha na tabela, por isso a tabela não foi fechada, os tags <th> dividem uma linha em células normalmente utilizadas para títulos das colunas, uma tabela com uma única linha é impressa nas linhas 22-23 (apenas com os títulos das colunas, mas note que o tag <table> não foi finalizado, isso porque nas linhas 33-36 os dados do objeto tipo ResultSet são concatenados a tags <tr> e <td> que geram novas linhas e colunas para a tabela que se encontra ainda sem fechamento. Em cada linha da tabela, são exibidos os dados de um registro do ResultSet recuperado do banco de dados através do comando SQL select da linha 30. Quem garante que o todos os registros sejam exibidos na página é linha 32, onde um laço while é executado enquanto o cursor conseguir avançar nas linhas do ResultSet, este laço se encerra na linha 36. Após o término do laço while, na linha 37, a tabela que se encontra iniciada na linha 22 é finalizada com o tag </table>. Execute seu projeto, o resultado deve ser exibido em seu navegador conforme a figura a seguir. Página9
Página10 Centro Federal de Educação Tecnológica de Minas Gerais