Resumo sobre Java Database Connectivity (JDBC)

De maneira resumida, o JDBC especifica uma série de funcionalidades básicas que são implementadas pelos Drivers especificamente para cada base de dados.

ResumosobreJavaDatabaseConnectivity-1.png

A biblioteca JDBC fornece elementos para estabelecer e gerenciar conexões com diferentes bases de dados simultaneamente, definição de comandos e manipulação de resultados, além do tratamento de exceções.

Para ter acesso aos recursos do JDBC em uma aplicação, o programador precisa fazer referência aos arquivos java.sql e javax.sql disponibilizados na instalação do Java Development Toolkit (JDK).

A conexão com uma base de dados utilizando JDBC pode ser resumida em quatro passos:

• Importe o pacote JDBC utilizando o comando import.
• Registre o Driver JDBC para a sua base de dados.
• Defina uma URL de conexão com o banco de dados.
• Crie um objeto de conexão com o comando getConnection().

Veja um exemplo de código de conexão com um banco de dados com uma conexão HTTP configurada.

ResumosobreJavaDatabaseConnectivity-2.png

A imagem abaixo, ilustra a arquitetura de interação da aplicação com o componente JDBC.

ResumosobreJavaDatabaseConnectivity-3.png

Fonte: http://www.onjava.com/pub/a/onjava/excerpt/javaentnut_2/index1.html


Comandos

Assim que estabelecemos uma conexão com um banco de dados utilizando JDBC, podemos executar comandos e obter ou manipular informações através das interfaces Statement, PreparedStatement e CallableStatement. Os dois primeiros (Statement e PreparedStatement), fazendo uso dos mesmos comandos (execute(), executeQuery() e executeUpdate()), mas se diferenciando na forma como os parâmetros são utilizados.

Ao utilizar a interface Statement, você irá inserir quaisquer parâmetros do seu comando SQL em uma única string que é utilizada no comando enviado ao banco de dados. Na ilustração abaixo, podemos passar uma string SQL como parâmetro para o comando createStatement, como por exemplo: "select * from Employees".

ResumosobreJavaDatabaseConnectivity-4.png

A interface PreparedStatement se diferencia por possibilitar a manipulação programática dos parâmetros a serem passados para o comando enviado ao banco de dados. Veja na ilustração abaixo, que a string do comando SQL possui um ponto de interrogação nos parâmetros age e id. Desta forma, podemos manipular as informações passadas como parâmetros utilizando o nome do parâmetro com o prefixo set, setAge ou setId por exemplo.

ResumosobreJavaDatabaseConnectivity-5.png

A interface CallableStatement é utilizada para execução de Procedimentos Armazenados (Store Procedures), que aceitam parâmetros de maneira semelhante a interface PreparedStatement mas é criada previamente no banco de dados. O desempenho é muito superior as interfaces Statement e PreparedStatement porque as StoreProcedures são compiladas.

Processos e Threads

Aplicações são compostas por um ou mais processos cuja execução é controlada pelo processador em um espaço de memória reservado, portanto, não compartilham informações com outros processos. Cada processo pode ser subdivido em Threads que compartilham informações de contexto e possibilitam um controle mais preciso do uso do tempo de processamento, incluindo o gerenciamento de carga quando há disponibilidade de múltiplos processadores. Threads podem ser definidas como a unidade básica de alocação de tempo de processamento.

Todo programa é executado inicialmente por uma Thread, denominada Main Thread. Programadores podem criar múltiplas Threads para realizar diferentes partes do seu código. A capacidade de executar múltiplas Threads simultaneamente no mesmo programa é denominada multithreading.

O exemplo abaixo, apenas demonstra a criação de duas instâncias de Threads e exibe informações de status das mesmas. Para visualizar exemplos mais elaborados, recomendo o url http://www.javaworld.com/article/2074217/java-concurrency/java-101--understanding-java-threads--part-1--introducing-threads-and-runnables.html.

public class ThreadTest1 {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Aplicação iniciada.");

// Thread1
System.out.println("Instanciando Thread1 ...");
Thread thread1 = new Thread();
System.out.println("Status: " + thread1.getState());

System.out.println("Parando Thread1 com stop...");
thread1.stop();
System.out.println("Status: " + thread1.getState());

System.out.println("Iniciando Thread1 ...");
thread1.start();
System.out.println("Status: " + thread1.getState());

System.out.println("Executando Thread1 com run ...");
thread1.run();
System.out.println("Status: " + thread1.getState());

System.out.println("Interrompendo Thread1 ... ");
thread1.interrupt();
System.out.println("Status: " + thread1.getState());


// Thread1
System.out.println("Instanciando Thread2 ...");
Thread thread2 = new Thread();
System.out.println("Status: " + thread2.getState());

System.out.println("Parando Thread2 com stop...");
thread2.stop();
System.out.println("Status: " + thread2.getState());

System.out.println("Iniciando Thread2 ...");
thread2.start();
System.out.println("Status: " + thread2.getState());

System.out.println("Executando Thread2 com run ...");
thread2.run();
System.out.println("Status: " + thread2.getState());

System.out.println("Interrompendo Thread2 ... ");
thread2.interrupt();
System.out.println("Status: " + thread2.getState());
}
}

Veja o resultado do processamento do código acima

run:
Aplicação iniciada.
Instanciando Thread1 ...
Status: NEW
Parando Thread1 com stop...
Status: NEW
Iniciando Thread1 ...
Status: RUNNABLE
Executando Thread1 com run ...
Status: RUNNABLE
Interrompendo Thread1 ...
Status: RUNNABLE
Instanciando Thread2 ...
Status: NEW
Parando Thread2 com stop...
Status: NEW
Iniciando Thread2 ...
Status: RUNNABLE
Executando Thread2 com run ...
Status: RUNNABLE
Interrompendo Thread2 ...
Status: RUNNABLE
BUILD SUCCESSFUL (total time: 0 seconds)

O exemplo acima, foi produzido com um projeto Java SE no IDE NetBeans.

Uma relação completa dos métodos disponíveis para Threads em Java, acesse https://www.tutorialspoint.com/java/java_multithreading.htm.



Referências:

http://www.oracle.com/technetwork/java/javase/jdbc/index.html
http://www.onjava.com/pub/a/onjava/excerpt/javaentnut_2/index1.html
https://msdn.microsoft.com/pt-br/library/windows/desktop/ms684841(v=vs.85).aspx
https://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html
https://www.tutorialspoint.com/jdbc/jdbc-statements.htm
https://www.tutorialspoint.com/java/java_multithreading.htm
http://www.javaworld.com/article/2074217/java-concurrency/java-101--understanding-java-threads--part-1--introducing-threads-and-runnables.html





Eryx Guimarães

Eryx Guimarães desenvolve e mantém soluções para empreendimentos na web.

Entre em Contato

Contato