Suporte de Retenção de Cursor do Aplicativo JDBC
O recurso de capacidade de suspensão do cursor pode reduzir a sobrecarga da interação JDBC com seu banco de dados relacional, ajudando, assim, a aumentar o desempenho do aplicativo.
Ativando a retenção do cursor, você mantém um conjunto de resultados disponível além dos limites da transação para ser utilizado por várias chamadas JDBC. A configuração de retenção aciona um cursor do banco de dados para manter as linhas recentemente atualizadas ativas fora da consolidação da transação que gerou os novos valores ou o conjunto de resultados. Por conseguinte, o cursor disponibiliza o conjunto de resultados para ser utilizado em uma transação subsequente.
Configurando a Retenção do Cursor
- Especifique o parâmetro ResultSet.HOLD_CURSORS_OVER_COMMIT ao criar ou preparar uma instrução utilizando os métodos createStatement, prepareStatement ou prepareCall.
- Chame o método setHoldability no objeto Connection. O valor de retenção do
cursor configurado com esse método torna-se o padrão. Se você especificar
a retenção do cursor no objeto Statement, esse valor substituirá o valor
especificado na conexão.
Não é possível especificar a retenção do cursor em uma conexão que pode ser compartilhada, depois que um segundo identificador faz referência a essa conexão. A chamada do método de retenção neste ponto gera uma exceção. Se você desejar configurar a retenção do cursor em uma conexão que pode ser compartilhada, chame o método antes da conexão ser registrada. Caso contrário, uma conexão que pode ser compartilhada manterá o mesmo valor de retenção que foi aplicado no registro anterior.
- Verifique a documentação do banco de dados para saber se o produto suporta a retenção do cursor como uma propriedade de origem de dados. O DB2, por exemplo, responde ao acionador da capacidade de retenção se você defini-lo como uma propriedade customizada da origem de dados. Consulte o tópico Configurações de Propriedade Customizada para obter mais detalhes.
O Impacto de Comportamentos de Conexão e de Transação na Retenção do Cursor
- Quando uma conexão é fechada, todas as instruções e os conjuntos de resultados são fechados mesmo se você tiver configurado a retenção do cursor.
- Quando uma transação é recuperada, todos os conjuntos de resultados são fechados mesmo se você tiver configurado a retenção do cursor.
- Quando uma transação local é confirmada, as conexões que podem ser compartilhadas e as que não podem ser compartilhadas podem ter um conjunto de resultados aberto além de um limite da transação.
- Quando uma transação global é confirmada, as conexões que não podem ser compartilhadas podem ter um conjunto de resultados aberto além de um limite da transação. Para conexões que podem ser compartilhadas, as instruções e os conjuntos de resultados serão fechados mesmo se você tiver configurado a retenção do cursor; o valor de retenção não causa impacto em conexões que podem ser compartilhadas, que participam de transações globais.
- Quando um escopo de transação local termina, no nível de método ou no nível de sessão da atividade, todas as instruções e os conjuntos de resultados para as conexões que podem ser compartilhadas são fechados. As instruções e os conjuntos de resultados para conexões que não podem ser compartilhadas permanecerm abertos até que o método de fechamento seja fechado na conexão.