Boa noite!!
Procurei aqui no forum e achei alguma coisa, porem ainda tenho dúvidas.
tenho as duas classes abaixo para incluir uma duplicata no banco e retornar o codigo desta duplicata para então eu incluir as parcelas.
Qual a melhor maneira de fazer isto?
Esta correto a maneira que fiz?
Existe uma maneira mais segura, robusta?
import java.sql.*;
import javax.swing.JOptionPane;
public class AcessoBancoServ {
Connection con;
public Connection conectar() {
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/banco?user=root&password=root");
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "Não foi possível encontrar o Driver!", "Aviso do Sistema", JOptionPane.INFORMATION_MESSAGE);
} catch (SQLException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "Não foi possível conectar ao banco!", "Aviso do Sistema", JOptionPane.INFORMATION_MESSAGE);
}
return con;
}
public void desconectar() {
try {
con.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class LancamentoReceberController {
String consultaSQL;
Statement stm;
PreparedStatement pstm;
ResultSet rs;
AcessoBancoServ bd = new AcessoBancoServ();
public Integer insertLancamentoReceber(LancamentoReceberVO pLancamentoReceber) throws SQLException, Exception {
consultaSQL = "insert into lancamento_receber (ID_DOCUMENTO_ORIGEM, ID_NATUREZA_FINANCEIRA, ID_CLIENTE "
+ ",DATA_LANCAMENTO, VALOR_TOTAL, VALOR_A_RECEBER) values (?,?,?,?,?,?)";
try {
pstm = bd.conectar().prepareStatement(consultaSQL);
bd.conectar().setAutoCommit(false);
pstm.setInt(1, pLancamentoReceber.getDocumentoOrigem());
pstm.setInt(2, pLancamentoReceber.getNaturezaFinanceira());
pstm.setInt(3, pLancamentoReceber.getCliente());
pstm.setDate(4, new java.sql.Date(pLancamentoReceber.getDataLancamento().getTime()));
pstm.setDouble(5, pLancamentoReceber.getValorTotal());
pstm.setDouble(6, pLancamentoReceber.getValorAReceber());
pstm.executeUpdate();
pstm.close();
bd.conectar().commit();
bd.conectar().setAutoCommit(true);
Integer id = 0;
pstm = bd.conectar().prepareStatement("SELECT LAST_INSERT_ID() ID");
rs = pstm.executeQuery();
if (rs.next()) {
id = rs.getInt(1);
}
return id;
} catch (Exception e) {
e.printStackTrace();
bd.conectar().rollback();
return null;
} finally {
bd.desconectar();
}
}
}
Este código que eu coloquei esta me retornando erro
java.sql.SQLException: Can't call commit when autocommit=true
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:933)
at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1635)