Conexã o com MySQL Connection Factory Para criar as conexões com o banco de dados será utilizado um padrão chamado Factory, onde através dele se terá uma única classe que proverá uma fábrica de conexão para a aplicação. Para implementá-la, primeiramente, cria-se uma nova classe java, que deve ser inserida em um novo (ou já existente) pacote, chamado br.com.aula.util (ver Figura 1). Figura 1. A Classe Java Esta classe será responsável por abrir e fechar a conexão com o banco de dados. Ela vai possuir um único atributo, do tipo Connection, do pacote Java.sql. Driver JDBC Para fazer a conexão, é necessário adicionar a biblioteca Driver JDBC do MySQL ao projeto, conforme Figura 2.
Figura 2. Driver JDBC MySQL Os métodos A classe ConnectionFactory possuirá dois métodos, um para abrir e outro para fechar a conexão com a base de dados, cujo serão chamados de getconnection() e closeconnection(). Abrir Conexão A abertura da conexão será feita pelo método getconnection(), que não recebe nada como parâmetro e retorna um objeto Connection. Para abrir a conexão será utilizado o método getconnection() do DriverManager, que recebe a URL, usuário e senha do banco. A implementação do método pode ser vista na Figura 3, onde se pode notar que a abertura da conexão ficou dentro de um try-catch, onde podem ser tratados os problemas de conexão.
Figura 3. Abertura de Conexão Fechar Conexão O fechamento da conexão se dará pelo método closeconnection(), cujo receberá um objeto Connection e o fechará. Feito isto, se tem a primeira versão da ConnectionFactory. Na sequencia, o método closeconnection() pode também fechar o PreparedStatement e o ResultSet, que serão vistos na sequencia. DAO O padrão Data Access Objects (DAO) tem por objetivo isolar a camada de persistência. Sendo assim não se mistura o código da aplicação com o código de acesso ao banco de dados, facilitando a manutenção e o reuso. Servlets, beans e JSPs ficam responsáveis pela lógica de apresentação e de negócios, já o DAO contém código que isola detalhes de acesso ao banco. Geralmente, tem-se um DAO para cada objeto do domínio do sistema (Usuários, Clientes, Funcionário, Livros, Autores, etc.). Cada DAO deve possuir uma interface, que especifica os métodos de manipulação de dados. Para exemplificar, será criado o DAO para uma classe Usuario. Inicialmente deve-se criar a interface DAO do usuário, cuja será chamada de UsuarioDAO, que possuirá os métodos abstratos a serem implementados pela classe que implementar UsuarioDAO.
UsuarioDAO Crie uma Interface Java (conforme figura 4). Na janela seguinte, é atribuído o nome UsuarioDAO à classe criada, e esta é inserida em um novo pacote, chamado br.com.aula.dao (ver Figura 5). Figura 4. Interface DAO Figura 5. Interface UsuarioDAO Na interface criada, serão inseridos os métodos a serem implementados pelas classes que implementarão o UsuarioDAO. Estes métodos serão: Inserção, atualização, exclusão, listagem e busca de usuário. Considerando estes métodos, se terá uma classe semelhante à vista na Figura 6.
Figura 6. Métodos UsuarioDAO JDBCusuarioDAO Agora que já se tem a Interface DAO, será criada a classe que implementará os seus métodos, cuja será chamada de JDBCusuarioDAO. Para isso, crie uma nova classe java, dentro do pacote br.com.aula.dao, e chame-a de JDBCusuarioDAO e a faça implementar a classe UsuarioDAO. Feito isto, deve-se ter um código semelhante ao da Figura 7. Figura 7. JDBCusuarioDAO
Agora, é preciso implementar a classe de forma a realizar as ações propostas pelos métodos no banco de dados. Método construtor O método construtor irá abrir uma conexão com o banco de dados utilizando a Fábrica de Conexões criada anteriormente. Método insereusuario() O método de inserção de usuário precisa receber um UsuarioBean, e inseri-lo no banco de dados. A captação dos dados do bean é feita através do acesso aos métodos get da classe, como pode ser visto entre as linhas 35 e 41 da Figura 8. Logo a seguir, é criada uma variável chamada sql que recebe o comando para inserção dos dados na tabela usuário. Note que, após o VALUES, onde seriam passados os valores a serem inseridos no banco de dados, apenas pontos de interrogação são colocados. Isto porque se irá trabalhar com um objeto do tipo PreparedStatement para setar os valores das?. Observe as linhas entre 49 e 57 da Figura 8, onde na linha 49, ps (o PreparedStatement) recebe a instrução sql parametrizada e, nas linhas seguintes é setado o valor que cada uma das? irá receber. Feito isto, basta executar a instrução no banco, o que é feito através do método executeupdate() do objeto ps, conforme linha 59 da Figura 8. Observe que, ao final do método é feita uma chamada ao método closeconnection() da fábrica de conexões, isso para evitar o excesso de conexões abertas no banco de dados.
Figura 8. Método insereusuario Método listausuario() De acordo com a interface criada, o método listausuario() não recebe argumento e deve retornar uma lista de UsuarioBean. O método pode ser observado na Figura 9, onde pode-se notar algumas novidades com relação ao método de inserção, tais como, a utilização do objeto ResultSet.
Este método é utilizado para receber os dados da Query SQL, onde agora não é utilizado o método executeupdate() como anteriormente, e sim o método executequery(), cujo retorna um objeto do tipo Resultset. O objeto retornado é lido e inserido UsuarioBean, que em seguida é inserido em um array de UsuarioBean, que ao final do método é retornado. Observe que o objeto ResultSet possui diferentes métodos para tratar tipos de dados diferentes. Neste caso foi utilizado apenas o getstring(), mas poderia ser utilizados métodos como: getint(), getboolean(), getdate(), gettime() entre muitos outros. Dica: Converter texto em Data Figura 9. Método listausuario() //Formatando a data SimpleDateFormat sd = new SimpleDateFormat("dd/MM/yyyy"); // Data atual Calendar data = Calendar.getInstance(); //Printando out.print(sd.format(data.gettime()));
Atividãde Faça com que o seu Servlet utilize o classe DAO criada para inserir usuários no banco de dados. Altere os métodos da ConnectionFactory para estáticos. Cria uma nova página de listagem de usuários, que utilizará o método de listagem para listar todos usuários cadastrados no sistema. Crie todas suas interfaces DAO.