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