Especialização em web com interfaces ricas Acessando Bancos de Dados com Java Prof. Fabrízzio Alphonsus A. M. N. Soares fabrizzio@inf.ufg.br professor.fabrizzio@gmail.com 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 try { 3 4 Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 5 6 } catch (ClassNotFoundException ex) { 7 System.out.println("Driver não encontrado!"); 8 } 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 try { 2 3 Class.forName("org.apache.derby.jdbc.ClientDriver"); 4 5 Connection cn = DriverManager.getConnection("jdbc:derby:/ home/fabrizzio/javadb/bancos/meubanco"); 6 7 cn.close(); 8 9 } catch (SQLException ex) { 10 System.out.println("Erro de SQL"); 11 } catch (ClassNotFoundException ex) { 12 System.out.println("Driver não encontrado!"); 13 } 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 import java.sql.connection; 2 import java.sql.drivermanager; 3 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 st.execute("insert into aluno (matricula, nome) 2 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 import java.sql.connection; 2 import java.sql.drivermanager; 3 import java.sql.sqlexception; 4 import java.sql.statement; 5 6 public class ExemploBD { 7 public static void main(string args[]){ 8 try { 9 Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 10 Connection cn = DriverManager.getConnection("jdbc:derby:/home/fabrizzio/ javadb/bancos/meubanco"); 11 Statement st = cn.createstatement(); 12 st.execute("insert into aluno (matricula, nome) values (1, João )"); 13 st.close(); 14 cn.close(); 15 } catch (SQLException ex) { 16 System.out.println("Erro de SQL"); 17 } catch (ClassNotFoundException ex) { 18 System.out.println("Driver não encontrado!"); 19 } 20 } 21 } 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 execute- Query(). 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 import java.sql.*; 2 public class ExemploBD { 3 public static void main(string args[]){ 4 try { 5 Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 6 Connection cn = DriverManager.getConnection("jdbc:derby:/home/fabrizzio/javadb/ bancos/meubanco"); 7 Statement st = cn.createstatement(); 8 ResultSet rs = st.executequery("select * from aluno"); 9 while(rs.next()){ 10 System.out.println("Matricula: " + rs.getstring("matricula")); 11 System.out.println("Nome: " + rs.getstring("nome")); 12 } 13 rs.close(); cn.close(); 14 } catch (SQLException ex) { 15 System.out.println("Erro de SQL"); 16 } catch (ClassNotFoundException ex) { 17 System.out.println("Driver não encontrado!"); 18 } 19 } 20 } 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 import java.sql.connection; 2 import java.sql.drivermanager; 3 import java.sql.sqlexception; 4 import java.sql.statement; 5 import java.sql.resultset; Prof. Fabrízzio Alphonsus A. M. N. Soares Acessando Bancos de Dados com Java 20/22
Exercício I 1 Crie um banco de dados 2 Crie uma tabela chamada cliente com a seguinte estrutura: matricula integer nome varchar(50) idade integer sexo char(1) 3 Faça dois programas em java: 1 Um para solicitar dados de clientes e cadastrar na tabela cliente; 2 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