Nivel de isolação JDBC PostgreSQL

To criando uma aplicação que vai usar o JDBC para falar com o PostgreSQL
Gostaria de entender o que cada nivel de isolação abaixo faz e qual seria o melhor nivel para uma aplicação cliente/servidor desktop?

TRANSACTION_NONE
TRANSACTION_READ_COMMITTED
TRANSACTION_READ_UNCOMMITTED
TRANSACTION_REPEATABLE_READ
TRANSACTION_SERIALIZABLE

Dario

Do melhor para o pior:

  1. READ_UNCOMMITTED
  2. READ_COMMITTED
  3. REPEATABLE_READ
  4. SERIALIZABLE

para vc entender melhor os niveis de isolamento vou primeiro vou passar a definição de alguns fenomenos que podem ocorrer de acordo com cada nivel de isolamento

dirty read (leitura suja): A transação lê dados não efetivados (uncommitted) escritos por uma transação concorrente.

nonrepeatable read (leitura que não pode ser repetida): A transação lê uma segunda vez os dados, e descobre que os dados foram modificados por outra transação (que os efetivou após ter sido feita a leitura anterior).

phantom read (leitura fantasma): A transação executa uma segunda vez uma consulta que retorna um conjunto de linhas que satisfaz uma determinada condição de procura, e descobre que o conjunto de linhas que satisfaz a condição é diferente devido a uma outra transação efetivada recentemente.

definição dos niveis de isolamento vou a definção dos niveis mais utizados que é o read commited e o serializable

Read commited

Quando uma transação processa sob este nível de isolamento, o comando SELECT enxerga apenas os dados efetivados antes da consulta começar
Nunca enxerga dados não efetivados, ou as mudanças efetivadas durante a execução da consulta pelas transações concorrentes

problema ocorrido no nivel

Observe que dois comandos SELECTs sucessivos enxergam dados diferentes, mesmo estando dentro de uma mesma transação se outras transações efetivarem alterações durante a execução do primeiro comando SELECT.

serializable

As aplicações que utilizam este nível de isolamento devem estar preparadas para tentar novamente as transações devido a falhas na serialização.
o comando a SELECT enxerga apenas os dados efetivados antes da transação começar; nunca enxerga dados não efetivados ou mudanças efetivadas durante a execução da transação por transações concorrentes

Obrigado,

To colocando o

setTransactionIsolation(mydbclass.TRANSACTION_READ_COMMITTED);

Acho que será melhor para o meu proposito

setAutoCommit(true);

Quero deixar ele ativo e quando tiver uma transação que eu queria controla posso seta-lo como false e fazer o commit na mão? se eu seta-lo para false como faço para o JDBC PostgreSQL entender que vai começar uma transação, vi apenas que tem commit() e rollback() mas não vi um begin()?

Dario