Olá pessoal, gostaria de uma ajuda com esse procedimento. Tenho um DAO que executa uma transação, onde deve inserir uma Pai e Varios filhos, ou seja uma Pre-Fatura e Seus intens, porém quando passo a mesma conexão para inserir os itens acontece o seguinte erro: Erro: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can’t start a cloned connection while in manual transaction mode.
Eu não consegui entender, sei que é uma coisa boba, mas já estou pedalando a um bom tempo. Alguém pode dar uma dica
[quote]Método da Super Class
public Connection getConnectionTrans() {
try {
if (ds != null) {
connection = ds.getConnection();
}
connection.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
return this.connection;
}
[/quote]
public class GravaPrePagamentoDao extends DAO
{
public GravaPrePagamentoDao(){
super(“java:comp/env/jdbc/teste”);
}
public void gravarPreFatura(PrePagamentoDto prePagamentoDto,List listaCtc) throws SQLException
{
Connection connection = null;
PreparedStatement preparedStatement = null;
StringBuffer sql = new StringBuffer();
CtcDto ctcDtoResult = new CtcDto();
//Convert Data
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String dataAtual = df.format(new java.util.Date());
try
{
//Inserir o Pre Pagamento
sql.append("INSERT INTO tb_RepresentantePrePag " +
"(idPrePagamento, cgcRepre, nomeRepre, enderecoRepre, cidadeRepre, " +
"ufRepre, cepRepre, emissor, dtemissao, statuPrePagamento ) " +
"VALUES "+
"(?,?,?,?,?,?,?,?,?,'P')");
connection = this.getConnectionTrans();
preparedStatement = connection.prepareStatement(sql.toString());
preparedStatement.setInt(1, prePagamentoDto.getIdPrePagamento());
preparedStatement.setString(2, prePagamentoDto.getCgcRepre());
preparedStatement.setString(3, prePagamentoDto.getNomeRepre());
preparedStatement.setString(4, prePagamentoDto.getEnderecoRepre());
preparedStatement.setString(5, prePagamentoDto.getCidadeRepre());
preparedStatement.setString(6, prePagamentoDto.getUfRepre());
preparedStatement.setString(7, prePagamentoDto.getCepRepre());
preparedStatement.setString(8, prePagamentoDto.getEmissor());
preparedStatement.setString(9, dataAtual);
preparedStatement.executeUpdate();
boolean status = this.gravaItens(connection ,listaCtc,prePagamentoDto);
if(status){
prePagamentoDto.setStatusGravacao(true);
this.closeCnx(connection);
}
else{
rollback(connection);
close(connection);
}
}
catch(SQLException ex)
{
ex.printStackTrace();
rollback(connection);
close(connection);
}
catch(Exception e)
{
e.printStackTrace();
rollback(connection);
close(connection);
}
}
public boolean gravaItens(Connection cnx, List listaCtc, PrePagamentoDto prePagamentoDto) throws SQLException
{
String sql = new String();
CtcDto ctcDtoResult = null;
boolean status = true;
try
{
//Abri o List dos CTC`s e grava ....
for(int i = 0; i <= listaCtc.size();i++ )
{
PreparedStatement preparedStatement = null;
ctcDtoResult = new CtcDto();
ctcDtoResult = (CtcDto) listaCtc.get(i);
sql = "INSERT INTO tb_RepresentantePrePagItens " +
"( idPrePagamento,filialctc,valorPagar,valorExcecao,status ) " +
"VALUES " +
"(?,?,?,?,'P')";
preparedStatement = cnx.prepareStatement(sql);
preparedStatement.setInt(1, prePagamentoDto.getIdPrePagamento());
preparedStatement.setString(2, ctcDtoResult.getFilialCtc());
preparedStatement.setDouble(3, ctcDtoResult.getValorPagar());
preparedStatement.setDouble(4, ctcDtoResult.getValorExcecao());
preparedStatement.executeUpdate();
//listaCtc.remove(i);
//listaCtc.add(i,ctcDtoResult);
sql = "";
}
}
catch(SQLException ex)
{
ex.printStackTrace();
rollback(cnx);
close(cnx);
status=false;
}
catch(Exception e)
{
e.printStackTrace();
status=false;
}
return status;
}
public void closeCnx(Connection x) throws SQLException
{
x.commit();
close(x);
}
Meu velho, mande a pilha do exception completo ai…