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] 
-------------------------------------------------------------------------

Responder a