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…
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
palmadias
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. */packagedataBase.connectionFactory;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;/** * * @author jmanetti */publicclassConnectionFactory{publicstaticConnectiongetConnectionMySql(){Connectioncon=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)");returncon;}catch(ClassNotFoundExceptione){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(SQLExceptione){System.out.println("Falha ao tentar Conectar com o Banco de Dados!!!");System.out.println(e);e.printStackTrace();}catch(Exceptione){System.out.println("Falha ao tentar Conectar com o Banco de Dados!!!");System.out.println(e);e.printStackTrace();}returncon;}publicstaticvoidcloseConnection(Connectioncon){if(con!=null){try{con.close();System.out.println("conexao Fechada com sucesso!");}catch(SQLExceptione){System.out.println("FALHA AO FECHAR CONEXAO");e.printStackTrace();}}}publicstaticvoidcloseConnection(Connectioncon,ResultSetresultSet){if(con!=null){try{con.close();System.out.println("conexao Fechada com sucesso!");}catch(SQLExceptione){System.out.println("FALHA AO FECHAR CONEXAO");e.printStackTrace();}}if(resultSet!=null){try{resultSet.close();System.out.println("ResultSet Fechado com sucesso!");}catch(SQLExceptionex){System.out.println("FALHA AO FECHAR RESULTSET");ex.printStackTrace();}}}publicstaticvoidcloseConnection(Connectioncon,PreparedStatementpreparedStatement){if(con!=null){try{con.close();System.out.println("conexao Fechada com sucesso!");}catch(SQLExceptione){System.out.println("FALHA AO FECHAR CONEXAO");e.printStackTrace();}}if(preparedStatement!=null){try{preparedStatement.close();System.out.println("PreparedStatement Fechado com sucesso!");}catch(SQLExceptionex){System.out.println("FALHA AO FECHAR PREPAREDSTATEMENT");ex.printStackTrace();}}}publicstaticvoidcloseConnection(Connectioncon,ResultSetresultSet,PreparedStatementpreparedStatement){if(con!=null){try{con.close();System.out.println("conexao Fechada com sucesso!");}catch(SQLExceptione){System.out.println("FALHA AO FECHAR CONEXAO");e.printStackTrace();}}if(resultSet!=null){try{resultSet.close();System.out.println("ResultSet Fechado com sucesso!");}catch(SQLExceptionex){System.out.println("FALHA AO FECHAR RESULTSET");ex.printStackTrace();}}if(preparedStatement!=null){try{preparedStatement.close();System.out.println("PreparedStatement Fechado com sucesso!");}catch(SQLExceptionex){System.out.println("FALHA AO FECHAR PREPAREDSTATEMENT");ex.printStackTrace();}}}}
como usar...
publicvoidsalvar(Usuariousuario)throwsException{Connectioncon=null;PreparedStatementps=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(SQLExceptionex){System.out.println(ex.getMessage());ex.printStackTrace();try{con.rollback();con.setAutoCommit(true);}catch(SQLExceptione){System.out.println(e.getMessage());ex.printStackTrace();}thrownewException("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: