Acessando Bancos de Dados com Java - INF

Propaganda
Especialização em web com interfaces
ricas
Acessando Bancos de Dados com Java
Prof. Fabrízzio Alphonsus A. M. N. Soares
[email protected] [email protected]
Instituto de Informática
Universidade Federal de Goiás
Aula 4
25 de maio de 2012
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
1/22
Bancos de Dados com Java
Nesta aula você irá aprender os seguintes conceitos:
Drivers para acesso a bancos de dados
Objeto Connection
Objeto Statement
Objeto ResultSet
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
2/22
Drivers de Bancos de Dados I
Um driver de banco de dados é um arquivo usado pelo programa
para comunicar-se com o sistema de gerenciamento de banco
de dados (DBMS).
Cada fabricante de bancos de dados fornece seu driver compatível e portanto, em sua maioria, estes não acompanham o
java.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
3/22
Drivers de Bancos de Dados II
Para isto, você pode obter o driver com o fabricante. No caso
do Apache Derby, você tem duas opções de drivers:
Driver embarcado (embedded) Este acompanha o mesmo JAR
do banco de dados (derby.jar)
Driver separado Este é utilizado quando utiliza-se o Apache
Derby em modo cliente/servidor (derbyclient.jar)
Em nosso caso, como a escolha das opções neste momento é
irrelevante, utilizaremos o driver embedded.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
4/22
Drivers de Bancos de Dados III
Para utilizar o driver você deverá fornecer como parâmetro ao
invocar o java.
1
java -classpath .:derby.jar MeuPrograma
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
5/22
Drivers de Bancos de Dados IV
Para utilizar o driver em seu programa, você deverá solicitar ao
java que carregue a classe do driver.
Para isto utilize o seguinte código:
1
2
3
4
5
6
7
8
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
} catch (ClassNotFoundException ex) {
System.out.println("Driver não encontrado!");
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
6/22
Drivers de Bancos de Dados V
Observe que a linha que carrega o driver está com tratamento
da exceção ClassNotFoundException.
Esta exceção é conhecida como driver não encontrado.
É importantíssimo tratar esta exceção e impedir o programa de continuar, já que a falta do driver significará que o
programa não tem outra coisa a fazer a não ser finalizar.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
7/22
Conexão com o banco de dados I
Agora que já carregamos o driver, já podemos estabelecer uma
conexão com o banco de dados.
Esta conexão é essencial para que possamos realizar operações
no banco de dados como: insert, update, delete e select.
Outras operações podem ser realizadas, mas por hora vamos
nos ater às básicas.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
8/22
Conexão com o banco de dados II
Para estabelecer uma conexão, você deve solicitar uma usando
a classe DriverManager (gerenciador de driver), e quando a conexão não for mais necessária você deverá fecha-la.
1
2
3
4
5
6
7
8
9
10
11
12
13
try {
Class.forName("org.apache.derby.jdbc.ClientDriver");
Connection cn = DriverManager.getConnection("jdbc:derby:/
home/fabrizzio/javadb/bancos/meubanco");
cn.close();
} catch (SQLException ex) {
System.out.println("Erro de SQL");
} catch (ClassNotFoundException ex) {
System.out.println("Driver não encontrado!");
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
9/22
Conexão com o banco de dados III
Observe que no parâmetro
"jdbc:derby:/home/fabrizzio/javadb/bancos/meubanco"
você deverá substituir pelo caminho completo do seu banco de
dados.
Observe ainda que, para utilizar as classes Connection, Drivermanager e SQLException será necessário importa-las.
1
2
3
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
Por fim, a conexão criada é uma instância de Connection, e foi
chamada de cn. Quando a conexão não for mais necessária
você deverá encerra-la invocando seu método close.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
10/22
Operações I
Para realizar operações no banco de dados você deverá utilizar
uma instância do tipo Statement.
O Statement é obtido a partir da sua conexão com o banco de
dados.
Para isto faça:
1
Statement st = cn.createStatement();
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
11/22
Operações II
Para executar uma operação do tipo INSERT, UPDATE ou
DELETE você deve invocar o método execute.
1
2
st.execute("insert into aluno (matricula, nome)
values (1, ’João’)");
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
12/22
Operações III
E quando seu statement não for mais necessário você deve
finaliza-lo.
1
st.close();
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
13/22
Operações IV
Um programa exemplo completo ficaria assim:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import
import
import
import
java.sql.Connection;
java.sql.DriverManager;
java.sql.SQLException;
java.sql.Statement;
public class ExemploBD {
public static void main(String args[]){
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection cn = DriverManager.getConnection("jdbc:derby:/home/fabrizzio/
javadb/bancos/meubanco");
Statement st = cn.createStatement();
st.execute("insert into aluno (matricula, nome) values (1, ’João’)");
st.close();
cn.close();
} catch (SQLException ex) {
System.out.println("Erro de SQL");
} catch (ClassNotFoundException ex) {
System.out.println("Driver não encontrado!");
}
}
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
14/22
Operações V
Para executar uma operação diferente, você poderá substituir
o parâmetro do método execute pelo comando SQL que você
desejar.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
15/22
Fazendo consultas com resultados I
Para executar consultas com resultados, você utilizará ainda
do Statement, porém, você deverá utilizar o método executeQuery().
Este método retornará um objeto do tipo ResultSet. Este objeto
representa o conjunto de dados da sua consulta SQL.
1
ResultSet rs = st.executeQuery("Select * from aluno");
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
16/22
Fazendo consultas com resultados II
Para acessar os dados retornados, você deverá utilizar os métodos get<Tipo> do ResultSet. Onde <tipo> é o tipo de dado
que você quer obter. Ex: getInteger(), getString(), ...
Lembre-se: Você deverá importar o ResultSet para poder obter
instâncias do seu tipo.
1
import java.sql.ResultSet;
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
17/22
Fazendo consultas com resultados III
Não necessariamente este tipo precisa ser o mesmo do tipo
armazenado no banco de dados, porém, se você usar um tipo
diferente, você fará uma conversão de tipo.
Se a conversão não for possível, irá gerar um erro.
Ex: O tipo armazenado é uma string e você tenta usar um
getInteger() porém o conteúdo não é um número inteiro.
Novamente: quando o ResultSet não for mais necessário você
deverá fecha-lo.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
18/22
Exemplo de consulta I
O código abaixo exemplifica programa que faz um select no
banco de dados e exibe todos os resultados na tela.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.sql.*;
public class ExemploBD {
public static void main(String args[]){
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection cn = DriverManager.getConnection("jdbc:derby:/home/fabrizzio/javadb/
bancos/meubanco");
Statement st = cn.createStatement();
ResultSet rs = st.executeQuery("Select * from aluno");
while(rs.next()){
System.out.println("Matricula: " + rs.getString("matricula"));
System.out.println("Nome: " + rs.getString("nome"));
}
rs.close(); cn.close();
} catch (SQLException ex) {
System.out.println("Erro de SQL");
} catch (ClassNotFoundException ex) {
System.out.println("Driver não encontrado!");
}
}
}
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
19/22
Exemplo de consulta II
Observação: No código acima, foi realizada a importação usando
o * apenas para que o código ficasse em um único slide.
Utilize sempre as importações individuais.
1
2
3
4
5
import
import
import
import
import
java.sql.Connection;
java.sql.DriverManager;
java.sql.SQLException;
java.sql.Statement;
java.sql.ResultSet;
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
20/22
Exercício I
1
2
3
Crie um banco de dados
Crie uma tabela chamada cliente com a seguinte
estrutura:
matricula integer
nome
varchar(50)
idade
integer
sexo
char(1)
Faça dois programas em java:
1
2
Um para solicitar dados de clientes e cadastrar na tabela
cliente;
Outro para listar os registros da tabela cliente;
Para fazer os programas, utilize os códigos de exemplo
desta aula.
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
21/22
Exercício II
Este exercício deverá ser realizado e submetido via moodle até
27/10 (quinta-feira).
Prof. Fabrízzio Alphonsus A. M. N. Soares | Acessando Bancos de Dados com Java
22/22
Download