Download
marcos mendes n.
Skip this Video
Loading SlideShow in 5 Seconds..
Curso de Linguagem Java PowerPoint Presentation
Download Presentation
Curso de Linguagem Java

Curso de Linguagem Java

61 Views Download Presentation
Download Presentation

Curso de Linguagem Java

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Marcos Mendes Curso de Linguagem Java 2º Semestre - 2007

  2. Conectividade de Banco de Dados(JDBC)‏

  3. Conectividade de Banco de Dados Arquitetura JDBC Introdução à Linguagem SQL Configuração ODBC Etapas da Programação JDBC Uso do MySQL API – JDBC Manutenção de Tabelas de Banco de Dados

  4. Conectividade de Banco de Dados Arquitetura JDBC Programa Java API JDBC (java.sql)‏ Driver JDBC Banco De Dados Comandos SQL

  5. Introdução à Linguagem SQL Consulta SELECT Alteração INSERT INTO UPDATE DELETE FROM

  6. Introdução à Linguagem SQL SELECT SELECTcolunasFROMtabelasWHEREcritério Exemplos: SELECT * FROM cliente SELECT Nome, Tel FROM Cliente SELECT Nome FROM Cliente WHERE Estado = ‘SP’ SELECT Nome, Tel FROM Cliente WHERE Nome LIKE ‘João%’ SELECT Cliente.Nome, Pedido.NumPed FROM Cliente, Pedido WHERE Cliente.CodCli = Pedido.CodCli

  7. Introdução à Linguagem SQL INSERT INTO INSERT INTOtabela (nomeCol1, nomeCol2...) VALUES (valor1, valor2...)‏ Exemplos: INSERT INTO Cliente ( CodCli, Nome ) VALUES ( ‘001’, ‘CIM Alcina’ )‏ INSERT INTO Pedido ( NumPed, Data ) VALUES ( ‘031/01’, TO_DATE (’13-MAR-2001’, ‘DD-MON-YYYY’ ) )‏

  8. Introdução à Linguagem SQL UPDATE UPDATEtabela SETnomeCol1 = valor1, nomeCol2 = valor2... WHEREcritério Exemplos: UPDATE Pedido SET Preço = Preço * 1.1 UPDATE Pedido SET Preço = Preço * 0.85 WHERE CodProd = ‘XYZ’

  9. Introdução à Linguagem SQL DELETE FROM DELETEFROMtabela WHEREcritério Exemplos: DELETE FROM Cliente WHERE CodCli = ‘001’ DELETE FROM Pedido WHERE Data < TO_DATE (’13-MAR-2001’, ‘DD-MON-YYYY’ )‏

  10. Mapeamento java.sql.Types para Java Tipo SQL (java.sql.Types)‏ Tipo Java BIT boolean TINYINT byte SMALLINT short INTEGER int BIGINT long REAL float FLOAT double DOUBLE double DECIMAL java.math.BigDecimal NUMERIC java.math.BigDecimal CHAR java.lang.String VARCHAR java.lang.String

  11. Mapeamento java.sql.Types para Java(cont.)‏ Tipo SQL (java.sql.Types)‏ Tipo Java LONGVARCHAR java.lang.String DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp BINARY byte[ ] VARBINARY byte[ ] LONGVARBINARY byte[ ] BLOB java.sql.Blob CLOB java.sql.Clob ARRAY java.sql.Array REF java.sql.Ref STRUCT java.sql.Struct

  12. Conectividade de Banco de Dados Configuração ODBC ( Windows )‏ Painel de Controle / Fontes de Dados ODBC (32 bits)‏ Você deve configurar os seguintes itens: Driver Nome da Fonte de Dados Banco de Dados correspondente Opcionalmente definir: Nome de Logon Senha de acesso

  13. Conectividade de Banco de Dados Etapas da Programação JDBC Importar java.sql.* Carregar Driver JDBC Especificar um Banco de Dados Abrir uma conexão com o Banco de Dados Criar um Statement (comando)‏ Submeter um comando SQL Receber os resultados

  14. Conectividade de Banco de Dados Etapa 1 – Importar o Pacote java.sql import java.sql.*; Etapa 2 – Carregar Driver JDBC (Depende do Banco de Dados) Carga dinâmica da classe com o método Class.forName: Class.forName ( “sun.jdbc.odbc.JdbcOdbcDriver” ); Instanciação de um objeto para forçar a carga da classe: new sun.jdbc.odbc.JdbcOdbcDriver ( ); Atribuição a variáveis do sistema com a opção –D: java –Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver programa

  15. Conectividade de Banco de Dados Etapa 3 – Criar uma url de conexão (Depende do Banco de Dados) Especifica-se um banco de dados através de uma url no seguinte formato: jdbc:subprotocol:subname onde: jdbc – Protocolo jdbc. subprotocol – Mecanismo de conexão subname – Fonte de Dados Exemplo: String url = “jdbc:odbc:db1”; Etapa 4 – Abrir Conexão Connection con = DriverManager.getConnection ( url, “user”, “senha” ); Fonte de Dados

  16. Conectividade de Banco de Dados Etapa 5 – Criar um Statement(comando)‏ Statement stmt = con.createStatement ( ); Etapa 6 – Submeter um comando SQL Neste exemplo, iremos submeter uma query. String query = “SELECT * FROM tabela”; ResultSet rs = stmt.executeQuery ( query );

  17. Conectividade de Banco de Dados Etapa 7 – Receber os resultados No caso de uma query, o resultado é na forma de um conjunto de linhas (registros) manipulados por métodos da interface ResultSet. Por exemplo, para exibir as linhas deste conjunto, percorre-se todas as linhas através do método next ( ). Resultset rs = stmt.executeQuery ( query ); while ( rs.next ( ) ) { // primeira coluna System.out.println ( rs.getString( 1 ) ); // segunda coluna System.out.println ( rs.getString( 2 ) ); }

  18. Conectividade de Banco de Dados import java.sql.*; public class Conexao { public static void main ( String args [ ] ) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:fonteDados"; Connection con = DriverManager.getConnection(url, "usuário", "senha"); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabela ORDER BY nomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) { System.out.println( rs.getString(2) + rs.getString("nomeCampo") ); } } catch (Exception e) { System.out.println ( e ); } } } Usando uma fonte de dados ODBC. Programa exemplo para testar uma conexão. Exibe os dados de uma tabela

  19. Conectividade de Banco de Dados import java.sql.*; public class Conexao { public static void main ( String args [ ] ) { try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://127.0.0.1:3306/nomeBanco"; Connection con = DriverManager.getConnection(url, "usuário", "senha"); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabela ORDER BY nomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) { System.out.println( rs.getString(2) + rs.getString("nomeCampo") ); } } catch (Exception e) { System.out.println ( e ); } } } Usando o MySQL. Programa exemplo para testar uma conexão. Exibe os dados de uma tabela

  20. Conectividade de Banco de Dados import java.sql.*; public class Conexao { public static void main ( String args [ ] ) { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); String url = "jdbc:sqlserver://127.0.0.1;" + "databaseName=nomeBanco;" + "user=usuário;password=senha"; Connection con = DriverManager.getConnection(url); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabela ORDER BY nomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) { System.out.println( rs.getString(2) + rs.getString("nomeCampo") ); } } catch (Exception e) { System.out.println ( e ); } } } Usando o SQLServer2005. Programa exemplo para testar uma conexão. Exibe os dados de uma tabela

  21. Usando o MySQL Os tópicos a seguir que dizem respeito ao MySQL foram baseados na seguinte bibliografia: Beginning PHP 4 Programando Wankyu Choi, Allan Kent, Chris Lea, Ganesh Prasad e Chris Ullman. Makron Books – Wrox Press SQL Magazine Edição 1 – Ano 1 SGBD no linux: MySQL por Clementino Leal Java Magazine Edição 7 – Ano 1 Bancos de Dados Livres por Fernando Lozano

  22. Instalação do MySQL (no Windows)‏ O MySQL pode ser obtido no site http://www.mysql.com Descompacte o arquivo mysql-4.0.16-win.zip em um diretório qualquer como c:\mysqlinst Execute o arquivo setup.exe, escolha o diretório padrão c:\mysql e a instalação típica Abra uma janela do DOS e vá para o diretório c:\mysql\bin Execute o comando winmysqladmin.exe para que o servidor seja carregado. Na primeira execução desse programa será pedido um nome de usuário e senha.

  23. Criação de banco de dados com MySQL Inicie o cliente MySQL monitor: c:\mysql\bin> mysql –u<usuário> -p<senha> Crie um banco de dados: mysql > create database pessoal; Torne o banco de dados ativo: mysql > use pessoal; Crie uma tabela: mysql > create table agenda ( -> idINT NOT NULL AUTO_INCREMENT, -> nomeVARCHAR(30), -> telefoneVARCHAR(30), -> PRIMARY KEY(id)) ; Insira alguns registros: mysql > INSERT INTO agenda VALUES (1, “Maria”, “4444-4444”) ; Exiba os registros inseridos: mysql > SELECT * FROM agenda ORDER BY nome ; Encerre o cliente: mysql > exit;

  24. Principais tipos de dados no MySQL Tipo de dado Descrição Intervalo/Formato INT Inteiro normal -231 a 231 - 1 TINYINT Int. muito peq. -27 a 27 - 1 BIGINT Inteiro grande -263 a 263 - 1 FLOAT Flutuante simples ±1.176x10-38 a ±3.403x10+38 DOUBLE / REAL Flutuante dupla ±2.225x10-308 a ±1.798x10+308 DECIMAL Flutuação String Igual a DOUBLE DATE Data AAAA-MM-DD DATETIME Data e hora AAAA-MM-DD hh:mm:ss TIMESTAMP Timestamp AAAAMMDDhhmmss

  25. Principais tipos de dados no MySQL (cont.)‏ Tipo de dado Descrição Intervalo/Formato CHAR String de tamanho fixo De 0 a 255 caracteres VARCHAR String de tamanho variável De 0 a 255 caracteres BLOB Objeto binário grande De 0 65.535 bytes de extensão LONGBLOB BLOB de tamanho grande De 0 bytes a 4MB de extensão TEXT Campo de texto De 0 65.535 bytes de extensão LONGTEXT Campo de texto longo De 0 bytes a 4MB de extensão

  26. Principais comandos do MySQL monitor Os comandos devem ser finalizados com “;” CREATE DATABASE Cria um banco de dados. DROP DATABASE Apaga um banco de dados CREATE TABLE Cria uma tabela no banco de dados ativo. SHOW DATABASES Exibe uma lista dos bancos de dados ativos. USE Seleciona um banco de dados como ativo. SHOW TABLES Exibe as tabelas do banco de dados ativo. EXIT Encerra o monitor. Além dos comandos SQL padrão.

  27. Conexão com MySQL Instale o driver Connector/J descompactando o arquivo: mysql-connector-java-3.1.0-alpha.zip, será criado um diretório com o mesmo nome. Inclua o arquivo mysql-connector-java-3.1.0-alpha.jar no Classpath. Defina o driver em Class.forName ( ) como: "com.mysql.jdbc.Driver" Defina a URL de conexão como: "jdbc:mysql://127.0.0.1:3306/banco" onde banco é o nome do banco de dados.

  28. Acesso a dados no MySQL com Eclipse Para se executar uma aplicação que acesse um banco de dados MySQL no Eclipse é necessário que se adicione o arquivo mysql-connector-java-3.1.0-alpha.jar no classpath do Eclipse. Para tanto, no Eclipse, Selecione o menu "Project" opção "Properties", clique em "Java Build Path", selecione a aba "Libraries", clique no botão "Add External Jars..." selecione o arquivo mysql-connector-java-3.1.0-alpha.jar no diretório onde o driver Connector/J foi instalado, clique em "abrir" e finalmente clique em "ok".

  29. Usando o Apache Derby Baixe o pacote de distribuição bin do Derby na página: http://db.apache.org/derby/derby_downloads.html Extraia o pacote baixado no diretório raiz. Renomeie a pasta de instalação para “derby” Adicione o diretório “derby\bin” à variável PATH Mais informações para instalação: http://db.apache.org/derby/docs/dev/pt_BR/getstart/

  30. Exercício Criar uma interface que grave registros em uma tabela Gravar Agenda Nome: Telefone:

  31. Comandos JDBC (java.sql.Statement)‏ Consulta Statement st = con.createStatement( ); String sql = "SELECT * FROM tabela WHERE codigo =" + x; ResultSet rs = st.executeQuery( sql ); Inclusão Statement st = con.createStatement( ); String sql = "INSERT INTO tabela (nome, cargo) " + "VALUES ( ‘ "+ vNome + " ‘ , ‘ "+ vCargo + " ‘ ) "; int res = st.executeUpdate( sql );

  32. Comandos preparados JDBC (java.sql.PreparedStatement)‏ Consulta String sql = "SELECT * FROM tabela WHERE codigo = ? "; PreparedStatement pst = con.prepareStatement( sql ); pst.setInt (1, x); ResultSet rs = pst.executeQuery( ); Inclusão String sql = "INSERT INTO tabela (nome, cargo) " + "VALUES ( ?, ?) "; PreparedStatement pst = con.prepareStatement( sql ); pst.setString (1, vNome); pst.setString (2, vCargo); int res = pst.executeUpdate( );

  33. Conjuntos de Resultados ( ResultSet )‏ Os valores que definem o tipo de um ResultSet são especificados no método createStatement ( ) ou no método prepareStatement ( )‏ Valores de Tipos de conjuntos TYPE_FORWARD_ONLY Conjunto de resultados não rolável. TYPE_SCROLL_INSENSITIVE Conjunto de resultados rolável, mas não sensível às alterações do banco de dados. TYPE_SCROLL_SENSITIVE Conjunto de resultados rolável e sensível às alterações do banco de dados. Valores de Concorrência de conjuntos CONCUR_READ_ONLY Conjunto de resultado apenas para leitura. CONCUR_UPDATABLE Conjunto de resultado atualizável. JDBC 2.0

  34. API - JDBC Interface Connection void close ( ) Fecha uma conexão. void commit ( ) Efetiva transação. Statement createStatement ( ) Cria um comando. PreparedStatement prepareStatement (String sql) Cria um comando preparado. void rollback ( ) Cancela transação. void setAutoCommit ( boolean b ) Define a forma de efetivação dos dados.

  35. API - JDBC Classe DriverManager Connection getConnection ( String url ) Connection getConnection ( String url, String usuário, String senha ) Obtém uma conexão com uma fonte de dados. Interface Statement void close ( ) Encerra um comando. boolean execute ( ) Executa o comando e retorna true se o resultado for um resultset ou false se for um contador de atualização. ResultSet executeQuery ( String comando ) Executa um comando de pesquisa e retorna um resultset. int executeUpdate ( String comando ) Executa um comando de atualização e retorna o número de linhas atualizadas.

  36. API - JDBC Interface PreparedStatement void clearParameters ( ) Limpa os valores dos parâmetros do comando. boolean execute ( ) Executa o comando e retorna true se o resultado for um resultset ou false se for um contador de atualização. ResultSet executeQuery ( ) Executa o comando de pesquisa e retorna um resultset. int executeUpdate (String sql) Executa o comando de atualização e retorna a quantidade de linhas atualizadas. void setXXX ( int i, XXX x ) Ajusta o valor do parâmetro i com o valor de x.

  37. API - JDBC Interface ResultSet boolean absolute ( int row ) Move o cursor para uma determinada linha. void afterLast ( ) Move o cursor para o final do ResultSet. void beforeFirst ( ) Move o cursor para o início do ResultSet. void cancelRowUpdates ( ) Cancela as atualizações feitas na linha atual. void close ( ) Fecha o ResultSet.

  38. API - JDBC void deleteRow ( ) Exclui uma linha. boolean first ( ) Move o cursor para a primeira linha do ResultSet. XXX getXXX ( int coluna ) Retorna o valor de uma coluna da linha corrente. Onde XXX é tipo de dado. int getRow ( ) Retorna o número da linha corrente. void insertRow ( ) Insere o conteúdo da linha de inserção no banco de dados. boolean isAfterLast( ) Indica se o cursor está após a última linha do ResultSet.

  39. API - JDBC boolean isBeforeFirst( ) Indica se o cursor está antes da primeira linha do ResultSet. boolean last ( ) Move o cursor para a última linha do ResultSet. void moveToInsertRow ( ) Move o cursor para a linha de inserção boolean next ( ) Move o cursor para a próxima linha do ResultSet. boolean previous ( ) Move o cursor para a linha anterior do ResultSet. boolean relative ( int n ) Move o cursor n linhas, para a frente se n for positivo, ou para trás se n for negativo. void updateXXX (int coluna, XXX dado ) Define o valor de uma coluna na linha corrente. Onde XXX é o tipo de dado.

  40. Exercício Criar um simples cadastro de funcionários Cadastro de Funcionários Código: xxx Nome: Cargo: Salário: Anterior Último Primeiro Próximo Novo Excluir Alterar Sair