Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Utilizacao de transacao e gerar um ID

Ola pessoal tudo bem ? Ja acompanhei o curso e me surgiu uma curiosidade, qual a melhor forma de controlar uma transacao e se tudo ocorrer certo um id é gerado (no caso o ID nao é auto increment). Necessario criar uma rotina para tratar isto?

Estou perguntando isto, pois a todo momento que eu tentar salvar e o programar estourar uma excessao, é incrementado um ID (baseado no exemplo do video).

4 respostas

Não entendi muto bem sua duvida, você queria salvar uma id? E sua id não é auto increment? então acho a melhor solução você settar na mão mesmo a sua id, mais porque não usa ela como auto increment?

solução!

Perdao novamente eu abri um post e nao expliquei corretamente o que eu quero.

Sim eu quero fazer o controle dos ids manualmente, porque se o ID estiver auto increment e estourar qualquer exceção na hora de salvar, é adicionado +1 independente da situação e isto é ruim (no meu ponto de vista), o ato de gerar chaves a todo momento, acredito nao ser elegante. Entao eu quero fazer o controle de transação de forma manual para que seja incrementado o ID somente quando tudo estiver OK.

Ficou claro a minha duvida?

Estou usando MYSQL nesta tentativa, abaixo esta o procedimento que estou tentando usar.

    try {
            connection.setAutoCommit(false);
            String sql = "insert into motorista (" + "mot_nome," + "idMotorista)" + "values (?,?);";
            PreparedStatement statement = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);

            statement.setString(1, motorista.getNome());
            statement.setInt(2, motorista.getId());

            statement.execute();
            connection.commit();
            connection.close();

        } catch (Exception e) {

Mas ao fazer isto é gerado um NULLPOINTEREXCEPTION

No caso eu nao estou sabendo como eu faço pro programa pegar a proxima chave (id) e adicionar e setar ela. Lembrando que a chave nao é auto incremento

Alguem ai pode me ajudar '-' ?

Olá Julio Cesar!

Não sei se seria isso que você desejaria;

try {
            connection.setAutoCommit(false);
            String sql = "INSERT INTO Motorista (Mot_Nome, idMotorista) Values (?,?)";
            PreparedStatement statement = connection.prepareStatement(sql);

            int proximoIdDisponivel = obterProximoIdDisponivel();
            statement.setString(1, motorista.getNome());
            statement.setInt(2, proximoIdDisponivel);

            statement.execute();
            connection.commit();
            connection.close();

        } catch (Exception e) {

O procedimento obterProximoIdDisponivel nada mais é que um SELECT MAX(idMotorista)+1 FROM Motorista ou seja vai retornar o proximo ID Disponivel para ser inserido;

outro detalhe eu removi o uso da constante Statement.RETURN_GENERATED_KEYS pois não irá precisar dela neste caso.

era isso o seu caso ?