Acesso a servidor multiUsuarios

1 resposta
R

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)

1 Resposta

ruben_m

Esse erro ai é estranho! vou tentar dar uma analisada no teu codigo!

Mas podes adicionar um codigo ai antes de começar com as consultas ! tipo:
SET AUTOCOMMIT=0

isso iras mandar tipo uma consulta sql :

String Sql ="SET AUTOCOMMIT=0";

depois é so mandar ao preparedStatment e tal.
espero ter ajudado

Criado 3 de agosto de 2011
Ultima resposta 4 de ago. de 2011
Respostas 1
Participantes 2