
- A API JDBC possibilita que a aplicação seja construída independente do banco de dados utilizado. Qualquer banco que implemente essa API pode ser utilizado de forma intercambiável pela aplicação.
- A Java Persistence API (JPA) é uma coleção de classes e métodos que ajudam a lidar com bancos de dados. Ela cria uma ponte entre classes Java e modelos relacionais (tabelas).
- Na URL de conexão do banco de dados, primeiro é definido o driver que será utilizado pela aplicação e depois algumas informações que esse driver precisa para realizar a conexão.
- Um driver é uma implementação da API JDBC específica para cada banco de dados. Alguns bancos possuem mais de uma implementação da API. As bibliotecas com a implementação da API devem ser dadas no momento de carregamento de classes da aplicação.
- As informações que são passadas para na URL dependem do driver utilizado.
É possível descobrir informações sobre a conexão de banco de dados em tempo de execução. A classe
DatabaseMetaData
possuí informações sobre suporte de funcionalidades, qual é o driver do banco, qual a versão, etc. Também existe a classe ResultSetMetaData
com a qual são extraídas informações sobre quantidade de colunas, tipos, nomes, etc. do resultado de uma ação ao banco de dados.Interfaces da JDBC API

- A interface
Connection
representa uma sessão específica a um banco de dados e é utilizada para criar todos tipos de declarações (statements).
- A interface
CallableStatement
representa chamadas para processos (procedures) e funções armazenadas no banco de dados.
- Criar uma declaração de JDBC com a classe
Statement
não garante proteção contra injeção de SQL. Além disso, como os valores são inseridos através de concatenação, a declaração é recompilada a cada execução. Por esses motivos a classeStatement
não é recomendada. (Deve-se utilizar a classePreparedStatement
ouCallableStatement
, pois essas utilizam substituição de parâmetros.)
- Todas interfaces da API JDBC implementam a interface
AutoCloseable
.

A ordem de encerramento das instâncias devem ser
Connection
, Statement
e ResultSet
. Se essa ordem não for respeitada, pode haver vazamento de memória.Configurações
Quando temos uma conexão a algum banco e criamos um
PrepraredStatement
ou Statement
, podemos passar algumas configurações sobre como o resultado será.PreparedStatement ps = conn.prepareStatement( <SQL>, <ResultSetType>, <ResultSetConcurrency>, <ResultSetHoldability> );
Algumas configurações não são suportadas por certos bancos de dados. Os métodos
supportsResultSetType
, supportsResultSetConcurrency
e supportsResultSetHoldability
, da classe DatabaseMetaData
podem verificar esse suporte. ResultSetType
Configura os métodos que poderão ser utilizados para navegar no
ResultSet
e como mudanças entregadas (committed) por outras declarações que ocorrem durante a leitura do ResultSet
são refletidas no resultado.TYPE_FORWARD_ONLY
(valor padrão):
- O único método disponibilizado no resultado será
next()
.
- A reflexão das mudanças depende do padrão do banco de dados.
- Essa estratégia funciona em qualquer banco de dados.
TYPE_SCROLL_INSENSITIVE
:
- O resultado possuirá os métodos
next()
,previous()
,first()
,last()
,absolute(int row)
erelative(int row)
.
- Utiliza a reflexão insensitiva. O que significa que o resultado não será atualizado com mudanças que ocorram durante sua leitura.
TYPE_SCROLL_SENSITIVE
:
- O resultado possuirá os mesmos métodos que
TYPE_SCROLL_INSENSITIVE
.
- Utiliza a reflexão sensitiva. Com isso, mudanças feitas por outras declarações sobre os dados do resultado durante a leitura dos dados implicará em uma atualização do
ResultSet
.
ResultSetConcurrency
Controla possibilidade de alteração do conjunto de resultado.
CONCUR_READ_ONLY
indica que um objetoResultSet
não pode ser alterado.
CONCUR_UPDATABLE
indica que um objetoResultSet
pode ser alterado.
ResultSetHoldability
Configura o comportamento do
ResultSet
quando sua conexão realiza uma entrega (commit). O comportamento padrão depende de qual banco de dados está sendo utilizado.HOLD_CURSORS_OVER_COMMIT
indica que ainda será possível iterar sobre o conteúdo do resultado após alterações na mesma conexão forem entregues. (Idealmente deve ser utilizado com resultados read-only.)
CLOSE_CURSORS_AT_COMMIT
indica que após alguma entrega ser realizada na conexão, essa encerra todosResultSet
. Em algumas aplicações esse comportamento pode aumentar a performance.