Connection com banco como melhor modo?

5 respostas
jingle

Bom, estou com uma duvida e gostaria de saber como vocês fazem…

Vocês criam sempre uma nova conection, sempre que precisam executar um SQL? ou só criam um novo Statement/PreparedStatement?

Se vocês guardam a connection, onde guardam ela?
exp: já vi pessoas que guardam na tela principal do sistema, outras criam um classe de session e guardam numa variavel estatica nessa session…

desde já dexo o meu “valeu povo” :slight_smile:

5 Respostas

Pedrosa

O ideal é ter uma ConnectionFactory que retorna uma connection só para a toda a aplicação, é essencial também o uso de um poll de conexoes, de uma pesquisada sobre os assuntos.

P

Um connection para toda a aplicação é muito arriscado. Lembrando que a transação acontece no nivel da conexão, e se mais de um usuário conectar ao mesmo tempo pode ser o caos…

Então minha sugestão é vc utilizar um ConnectionFactory, como foi citado acima, e por traz dessa factory usar um pool. Na te tem varios prontos.

abraços.

Jeferson_Manetti
Pedrosa:
O ideal é ter uma ConnectionFactory que retorna uma connection só para a toda a aplicação, é essencial também o uso de um poll de conexoes, de uma pesquisada sobre os assuntos.

segue um exemplo de uma conectionFactory

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dataBase.connectionFactory;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author jmanetti
 */
public class ConnectionFactory {
    
 
public static Connection getConnectionMySql() {
      Connection con = null;

      try {
          
           Class.forName("org.gjt.mm.mysql.Driver");

           con = DriverManager.getConnection(
                   "jdbc:mysql://localhost:3306/matrizprodutividade",
                   "root","admin");

           System.out.println("conexao bem sucedida... (MySql)");

           return con;

      } catch (ClassNotFoundException e) {
        System.out.println("Falha ao tentar Conectar com o Banco de Dados\n" +
                "Não foi encontrado o Driver MySql!!");
        System.out.println(e);
        e.printStackTrace();
      } catch (SQLException e) {
        System.out.println("Falha ao tentar Conectar com o Banco de Dados!!!");
        System.out.println(e);
        e.printStackTrace();
      } catch (Exception e) {
        System.out.println("Falha ao tentar Conectar com o Banco de Dados!!!");
        System.out.println(e);
        e.printStackTrace();
      }

      return con;
  }

public static void closeConnection(Connection con){
    
    if (con != null) {
      try {
        con.close();
        System.out.println("conexao Fechada com sucesso!");
      } catch (SQLException e) {
          System.out.println("FALHA AO FECHAR CONEXAO");
          e.printStackTrace();
      }
     }       
  }

public static void closeConnection(Connection con, ResultSet resultSet){
    
    if (con != null) {
      try {
        con.close();
        System.out.println("conexao Fechada com sucesso!");
      } catch (SQLException e) {
          System.out.println("FALHA AO FECHAR CONEXAO");
          e.printStackTrace();
      }
     }
    
    if(resultSet != null){
       try {
           resultSet.close();
           System.out.println("ResultSet Fechado com sucesso!");
       } catch (SQLException ex) {
           System.out.println("FALHA AO FECHAR RESULTSET");
           ex.printStackTrace();
       }
    }
        
  }

public static void closeConnection(Connection con,
        PreparedStatement preparedStatement) {
    
    if (con != null) {
      try {
        con.close();
        System.out.println("conexao Fechada com sucesso!");
      } catch (SQLException e) {
          System.out.println("FALHA AO FECHAR CONEXAO");
          e.printStackTrace();
      }
     }
       
    if(preparedStatement != null){
        try {
           preparedStatement.close();
           System.out.println("PreparedStatement Fechado com sucesso!");
       } catch (SQLException ex) {
           System.out.println("FALHA AO FECHAR PREPAREDSTATEMENT");
           ex.printStackTrace();
       }
    }
    
  }

public static void closeConnection(Connection con, ResultSet resultSet,
        PreparedStatement preparedStatement) {
    
    if (con != null) {
      try {
        con.close();
        System.out.println("conexao Fechada com sucesso!");
      } catch (SQLException e) {
          System.out.println("FALHA AO FECHAR CONEXAO");
          e.printStackTrace();
      }
     }
    
    if(resultSet != null){
       try {
           resultSet.close();
           System.out.println("ResultSet Fechado com sucesso!");
       } catch (SQLException ex) {
           System.out.println("FALHA AO FECHAR RESULTSET");
           ex.printStackTrace();
       }
    }
    
    if(preparedStatement != null){
        try {
           preparedStatement.close();
           System.out.println("PreparedStatement Fechado com sucesso!");
       } catch (SQLException ex) {
           System.out.println("FALHA AO FECHAR PREPAREDSTATEMENT");
           ex.printStackTrace();
       }
    }
    
  }

}

como usar...

public void salvar(Usuario usuario) throws Exception{
        Connection con = null;
        PreparedStatement ps = null;
        
        try { 
            con = ConnectionFactory.getConnectionMySql();
            
            con.setAutoCommit(false);

            ps = con.prepareStatement("INSERT INTO TB_USUARIO(Login, Senha, Nome," +
                                      "Email, Observacao , CodPerfil) " +
                                      "VALUES (?,?,?,?,?,?)");
            
            ps.setObject(1,usuario.getLogin());             
            ps.setObject(2,usuario.getSenha());
            ps.setObject(3,usuario.getNome());
            ps.setObject(4,usuario.getEmail());
            ps.setObject(5,usuario.getObservacao());
            ps.setObject(6,usuario.getPerfil().getCodPerfil());
                        
            ps.execute();
            
            con.commit();
            con.setAutoCommit(true);
            
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
            try {
                con.rollback();                
                con.setAutoCommit(true);
            } catch (SQLException e) {
                System.out.println(e.getMessage());
                ex.printStackTrace();
            }
            throw new Exception("ERRO ao Gravar Dados do Peso\n" +
                    "DETALHES >>> "+ex.getMessage(),ex);
        }finally{
            ConnectionFactory.closeConnection(con,ps);
        }
    }

e mais ou menos isso...

ps: depois q descobri a maravilha do Hibernate nunca mais precisei fazer td isso =)

espero ter ajudado

flw t+

editando...

ai ta faltando o pool de conexões =)

jingle

Valeu pessoal =], vo tentar implementar dessa forma no meu código.

nunca trabalhei com hibernate, pelo menos não diretamente vou dar uma olhada nele também ve se pode me ajudar.

Pedrosa

Se for realmente usar JDBC use o poll e sempre feche suas conexões:

}finally{  
   ConnectionFactory.closeConnection(con,ps);  
}

Mesmo usando um poll se não fechar a conexao sua aplicação cai.

Criado 23 de março de 2009
Ultima resposta 23 de mar. de 2009
Respostas 5
Participantes 4