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