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?
Um ou vários java.sql.Connection?
3 Respostas
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
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:
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 !