Um ou vários java.sql.Connection?

3 respostas
M

Se eu tiver vários statements, resultsets, etc, todos podem estar vinculados a um mesmo Connection? Ou eu preciso criar um Connection para cada Statement?

3 Respostas

M

Ah sim, esqueci de mencionar, mas eu preciso de vários Statements ao mesmo tempo.

A minha dúvida, é que eu estava desenvolvendo algo que cria um Connection, depois um Statement, executa uma consulta criando um ResultSet.
Depois, precisei trabalhar com duas consultas ao mesmo tempo, então criei 2 Statements, fazendo uma consulta em cada um, e obtendo um ResultSet em cada consulta. Só que a partir daí começou algo estranho: Quando eu fecho o segundo Statement e depois tento dar um next() no ResultSet criado pelo primeiro Statement, dá um erro dizendo que o ResultSet está fechado

M

Opa,

bem criar mais de uma conexão não é indicado, pois a conexão é uma das operações mais caras. Sugiro é criar um statemente e um result se para cada de se for usar um dentro do outro:

Connection conn = getConnection();
PreparedStatement pstm1 = conn.preparedStatment(sql1);
ResultSet rs1 = pstm1.executeQuery();
while(rs1.next()) {
   PreparedStatement pstm2 = conn.preparedStatment(sql2);
   ResultSet rs2 = pstm2.executeQuery();
   while(rs2.next()){
   }
   rs2.close();
   pstm2.close();
}

rs1.close();
pstm1.close();

Assim funciona..

:okok:

E

Disponibiliza conexão ao banco

package pkg.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class ControladorConexao {

	    private static final String url = "jdbc:mysql://localhost/banco";
		private static final String driver = "org.gjt.mm.mysql.Driver"; 
		private static final String usuario = "root";
		private static final String senha ="root";
	    
		
		
		
		public static Connection abrirConexao() throws SQLException{
			
			try {
			   	  Class.forName(driver);
				  return DriverManager.getConnection(url,usuario,senha);
			} catch (ClassNotFoundException e) {
				System.out.print(" Problema na Conexao com Banco de Dados !!");
				throw new SQLException(e.getMessage());
			}
		}
		
		
		
		/*public static void main(String args[]){
			try {

				Connection conexao = ControladorConexao.abrirConexao();
				
				System.out.println(" Conexao com banco de dados realizada com sucesso !! ");
						
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}*/

}//fim da classe
manutenção no banco
package pkg.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import pkg.filtro.FiltroCliente;
import pkg.interfac.cliente.InterfaceDAOCliente;
import pkg.vo.VOCliente.VOCliente;

public class DAOCliente implements InterfaceDAOCliente {
 
	private static DAOCliente singleton = null ; // declaração
	

	/* metodo que gera uma instancia da classe */		
	public static DAOCliente getInstancia() {		
		
		if ( singleton == null ) {
  			 singleton = new DAOCliente();      // gera uma unica instancia da classe 
		}
		
		return singleton;
	
	}//fim do singleton 	


	
	
	/*  metodo que realiza a inclusao de dados na tabela tbl_nivel_escolaridade */
	public void incluir(VOCliente pVOCliente) throws SQLException {
		
		PreparedStatement prepStatement = null;		
		String sql = " INSERT INTO cliente(id,nome,tel,idade) VALUES (? ,? ,? ,?)" ;
		
		
			
			Connection conexao = ControladorConexao.abrirConexao(); // abre a conexao com o banco de dados 			
			prepStatement = conexao.prepareStatement(sql); // recebe o codigo sql a ser executado  				
			prepStatement.setInt(1,pVOCliente.getId());
			prepStatement.setString(2,pVOCliente.getNome());
			prepStatement.setString(3,pVOCliente.getTelefone());
			prepStatement.setString(4,pVOCliente.getIdade());			
		    prepStatement.executeUpdate();//executa o codigo sql 
			prepStatement.close();// fecha a execução de códigos sql  			
			conexao.close();//fecha a conexão com o banco			
		
			System.out.println("Cargo Incluido com Sucesso!!!");
			
		
   }//fim do metodo que faz a inclusão !



	/*  metodo que realiza a consulta de dados na tabela tbl_nivel_escolaridade */	
    public Collection  consultar(FiltroCliente pFiltroCliente ) {
    	
    	ArrayList colecao = new ArrayList();
		VOCliente voCliente = null;
		String sql = "";
		String conector ="";
		int indice = 0 ;
        PreparedStatement prepStatement = null;	
        ResultSet rs = null;
		String query = " select * from cliente ";			
		
		try {
			
			
			Connection conexao = ControladorConexao.abrirConexao(); // abre a conexao com o banco de dados 			
			
			
			if(pFiltroCliente.isIs_Id()){
				sql = sql + conector + " cliente.id = ? ";
				conector = conector + " \n and \n "; 
			}
			
			
			
			if(pFiltroCliente.isIs_Nome()){
				sql = sql + conector + " cliente.nome = ? ";
				conector = conector + " \n and \n "; 
			}
			
			if(pFiltroCliente.isIs_Telefone()){
				sql = sql + conector + " cliente.tel = ? ";
				conector = conector + " \n and \n "; 
			}
			
			if(pFiltroCliente.isIs_Idade()){
				sql = sql + conector + " cliente.idade = ? ";
				conector = conector + " \n and \n "; 
			}
			
			
			
			if(sql.length() > 0 ){
				query = query + "\n where \n" + sql ;
			}
			
			
			
			prepStatement = conexao.prepareStatement(query);
			
			

			if(pFiltroCliente.isIs_Id()){
				indice = indice + 1;
				prepStatement.setInt(indice,pFiltroCliente.getId());
			}
			if(pFiltroCliente.isIs_Nome()){
				indice = indice + 1;
				prepStatement.setString(indice,pFiltroCliente.getNome());
			}
			if(pFiltroCliente.isIs_Telefone()){
				indice = indice + 1;
				prepStatement.setString(indice,pFiltroCliente.getTelefone());
			}			
			
			if(pFiltroCliente.isIs_Idade()){
				indice = indice + 1;
				prepStatement.setString(indice,pFiltroCliente.getIdade());
			}
			
			
			
			
			rs = prepStatement.executeQuery();
			
		       
			while ( rs.next() ) {
				
				voCliente = new VOCliente();
				voCliente.setId(rs.getInt("id"));
				voCliente.setNome(rs.getString("nome"));
				voCliente.setTelefone(rs.getString("tel"));
				voCliente.setIdade(rs.getString("idade"));
				colecao.add(voCliente);	
			
			
			}//fim do while 
                
             
             
             rs.close();
			 conexao.close(); //finaliza a conexão com o banco 			
	        
			 System.out.println(" Consulta realizada com sucesso !!! ");
			
			 
	    } catch (SQLException e) {
				e.printStackTrace();
		}//fim do tratador de exceção			
	 
		     return colecao ;
		
    }//fim do metodo que faz a inclusão !    
   
}

realiza a consulta e inclusao . Esta consulta vc faz kaulker tipo de consulta ke vc kiser neste unico metodo !

Criado 1 de abril de 2006
Ultima resposta 15 de abr. de 2006
Respostas 3
Participantes 3