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