Состояние транзакции в JDBC - PullRequest
5 голосов
/ 05 октября 2009

Есть ли способ узнать, находится ли транзакция в "текущем" состоянии в JDBC? Я ничего не нашел в Connection API .

Спасибо

1 Ответ

4 голосов
/ 05 октября 2009

JDBC не отслеживает состояние транзакции. Задача БД - отслеживать состояние транзакции.

Учитывая это, у вас все еще есть два способа отслеживать / знать состояния транзакции.

Вы можете сделать sql-вызов в вашу базу данных, чтобы узнать подробности транзакции. для оракула он будет находиться в таблице транзакций v $, предложенной в этой записи .

SELECT COUNT(*) 
  FROM v$transaction t, v$session s, v$mystat 
  WHERE t.ses_addr = s.saddr AND s.sid = m.sid AND ROWNUM = 1;

Другое решение заключается в использовании кода диспетчера транзакций в некоторых распространенных средах, таких как hibernate (я полагаю, что он есть и в Spring).

public interface Session {
  public abstract org.hibernate.Transaction getTransaction();
}

public Transaction {
  public abstract boolean wasRolledBack() throws org.hibernate.HibernateException;

  public abstract boolean wasCommitted() throws org.hibernate.HibernateException;

  public abstract boolean isActive() throws org.hibernate.HibernateException;
}
...