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