Oi pessoal,

algum tempo atrás o Marcel envio um e-mail para lista com dicas para separar
a parte de persistência, e no momento estou tentando implementar uma classe
que faça isso. Gostaria de saber se alguém tem outros exemplos ou
informações de como implementar isso.


----- Original Message -----
From: "Marcel Efraim Sakamoto" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, June 08, 2001 18:23
Subject: RES: [java-list] Dúvida sobre Statements com Servlets


> Carlos,
>
> antes de mais nada, se eu fosse você colocaria toda a lógica de conexão e
> demais operações com bancos de dados numa outra classe, ou seja, fora do
> servlet. Isso vai lhe ajudar bastante, principalmente na hora de dar
> manutenção.
>
> Se você fizer isso, a parte que abre a conexão com o banco de dados
poderia
> ficar no construtor dessa classe, por exemplo. Depois, você pode criar um
> método que execute seu Statement utilizando a conexão que foi aberta
(logo,
> o objeto Connection deve ser um atributo - de preferência privado - dessa
> classe).
>
> Por exemplo:
> package <seu pacote>;
>
> import java.sql.Connection;
> import java.sql.Statement;
> import java.sql.ResultSet;
>
> public class DBAccess {
>
> private static final String DRIVER = <driver do seu banco de dados>;
> private static final String URL = <url para acessar as tabelas>;
> private Connection conn;
>
> public DBAccess() {
> // Registra o driver
>             Class.forName(DRIVER).newInstance();
> // Abre a conexão com o banco de dados
>             conn = DriverManager.getConnection(URL);
> }
>
> public <seu retorno> getX() {
> String query = <sua query>;
>
> ResultSet rs = null;
>   Statement stmt = null;
> try {
> stmt = this.conn.createStatement();
>     rs = stmt.executeQuery(query);
>
> return <o objeto que você quiser>;
>     } catch(Exception e) {
>             // Tratamento da exceção
> } finally {
> try {
> if (rs != null) {
> rs.close();
> }
>
> if (stmt != null) {
> stmt.close();
> }
> } catch (Exception ignored) {
> // Não tem problema se não conseguiu fechar o statement
> } finally {
> rs = null;
> stms  null;
> }
> }
> }
> }
>
> Aí então, no servlet, quando você quiser obter executar alguma query,
basta
> criar uma instância dessa classe e chamar o método correto. Mas não se
> esqueça de criar um método que feche a conexão. É melhor que seja num
método
> separado (ao invés de colocar no próprio método que executa a query)
porque
> se você for fazer outra operação com o banco de dados, não é necessário
> criar uma nova conexão, você pode aproveitar a que está aberta.
>
> Como você pôde perceber isso não tem nada a ver com servlets.
>
> Espero que lhe seja útil.
>
> Marcel.
>
> -----Mensagem original-----
> De: Carlos Campos [mailto:[EMAIL PROTECTED]]
> Enviada em: sexta-feira, 8 de junho de 2001 12:50
> Para: '[EMAIL PROTECTED]'
> Assunto: RES: [java-list] Dúvida sobre Statements com Servlets
>
>
> Oi Eduardo,
>
> Primeiramente agradeço pela resposta, mas só pra FECHAR:
>
> - Abre-se sempre a conexão no método init() e abre-se sempre o statement
no
> método service(), CORRETO ???
>
> []'s
>
> Carlos Campos
>
> > ----- Mensagem original -----
> > De: Eduardo de S. Bernardino [SMTP:[EMAIL PROTECTED]]
> > Enviada em: Sexta-feira, 8 de Junho de 2001 11:05
> > Para: [EMAIL PROTECTED]
> > Assunto: Re: [java-list] Dúvida sobre Statements com Servlets
> >
> > Respondendo às dúvidas, segundo o pouco que conheço. Não sei se é a
melhor
> > solução, mas ai vai:
> >
> > 1 - )  A conexão se for do tipo static será acessada por todas as
> > instâncias
> > do servlet. Ou seja você e outro carinha que acessarem o mesmo servlet
de
> > máquinas diferentes utilizarão a mesma conexão. Para conectar com o
banco
> > de
> > dados, o ideal é no construtor ou no método init() mesmo.
> >
> > 2 - ) Abra os statements sempre antes da execução do comando SQL e
feche-o
> > após a conclusão ou obtenção de dados do resultset.
> >
> > 3 - ) Acesso simultâneo é complicado, deve-se utilizar pool de conexões
> > para
> > evitar erros no acesso simultâneo. Tente encontrar exemplos nos sites de
> > servlets disponíveis na net:
> >
> > www.servlets.com
> > www.coolservlets.com
> >
> > Agora não sei se é possível acesso concorrente com o Access. Ele não é
um
> > banco muito indicado para aplicações com servlets. Tente buscar alguma
> > documentação a respeito disto. Quem sabe...
> >
> > Abraços
> > Eduardo
> > eCorp
> > [EMAIL PROTECTED]
> >
> >
> > ----- Original Message -----
> > From: "Carlos Campos" <[EMAIL PROTECTED]>
> > To: "'Lista SouJava'" <[EMAIL PROTECTED]>
> > Sent: Friday, June 08, 2001 10:11 AM
> > Subject: [java-list] Dúvida sobre Statements com Servlets
> >
> >
> > Prezados Javaneses,
> >
> > Apenas a título de ratificação gostaria de confirmar o seguinte
> > procedimento
> > no uso de Servlets:
> >
> > 1.) Deve-se abrir a conexão com o Banco de Dados no método Init():
> >      con1  = DriverManager.getConnection(url1,"","");
> >      checkForWarning(con1.getWarnings());
> >
> > 2.) Deve-se abrir os Statements SEMPRE no método Service() de modo a
> > evitar
> > a colisão com as múltiplas conexões ?
> >     stmt1 = con1.createStatement();
> >     checkForWarning(con1.getWarnings());
> >
> > Esta dúvida surgiu quando testei o acesso simultaneo com vários usuários
> > num
> > Banco MS Access 97 e o driver ODBC gerava os seguintes erros de SQL (Sql
> > Exception) : "General Error" ou "Erro de Sequência de Função";
> >
> > O problema seria uma limitação do MS Access em acessar simultaneamente o
> > mesmo registro por vários usuários, mesmo por um simples SELECT através
da
> > ponte JDBC-ODBC ???
> >
> > Estranhamente isto não ocorre quando se usa um programa C/S em Visual
> > Basic.
> > Seria uma deficiência da ponte JDBC-ODBC ???
> >
> > Sei que no uso de laços WHILE, por exemplo, temos que abrir um Statement
> > para cada ResultSet acionado, mas gostaria de confirmar este conceito
> > sobre
> > ONDE abrir corretamente os Statements de modo a obter o máximo de
> > performance do Servlet independente das limitações do Banco de Dados,
ok?
> >
> > Agradeço pelos comentários,
> >
> > []'s
> >
> > Carlos Campos
> > Analista de Sistemas / Bolsista PCI
> > [EMAIL PROTECTED]
> > MCT / CETEM - Centro de Tecnologia Mineral
> > Fone: 0xx21 3865-7358
> > Fax :  0xx21 290-9196
> >
> >
> > ------------------------------ LISTA
SOUJAVA ----------------------------
> > http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
> > dúvidas mais comuns: http://www.soujava.org.br/faq.htm
> > regras da lista: http://www.soujava.org.br/regras.htm
> > para sair da lista: envie email para
[EMAIL PROTECTED]
>
> -------------------------------------------------------------------------
> >
> >
> >
> >
> > ------------------------------ LISTA
SOUJAVA ----------------------------
> > http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
> > dúvidas mais comuns: http://www.soujava.org.br/faq.htm
> > regras da lista: http://www.soujava.org.br/regras.htm
> > para sair da lista: envie email para
[EMAIL PROTECTED]
>
> -------------------------------------------------------------------------
>
> ------------------------------ LISTA SOUJAVA ----------------------------
> http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
> dúvidas mais comuns: http://www.soujava.org.br/faq.htm
> regras da lista: http://www.soujava.org.br/regras.htm
> para sair da lista: envie email para [EMAIL PROTECTED]
> -------------------------------------------------------------------------
>
>
> ------------------------------ LISTA SOUJAVA ----------------------------
> http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
> dúvidas mais comuns: http://www.soujava.org.br/faq.htm
> regras da lista: http://www.soujava.org.br/regras.htm
> para sair da lista: envie email para [EMAIL PROTECTED]
> -------------------------------------------------------------------------
>


------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a