curso de linguagem java

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

Upload: noah-fuentes

Post on 14-Mar-2016

50 views

Category:

Documents


1 download

DESCRIPTION

Marcos Mendes. Curso de Linguagem Java. 2º Semestre - 2007. Conectividade de Banco de Dados (JDBC) ‏. 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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Curso de Linguagem Java

1

Curso de Linguagem Java

Marcos Mendes

2º Semestre - 2007

Page 2: Curso de Linguagem Java

2

Conectividade de Banco de Dados(JDBC)

Page 3: Curso de Linguagem Java

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

Page 4: Curso de Linguagem Java

4

Conectividade de Banco de Dados

Arquitetura JDBCPrograma Java

API JDBC(java.sql)

Driver JDBC

BancoDe Dados

Comandos SQL

Page 5: Curso de Linguagem Java

5

Introdução à Linguagem SQL Consulta

SELECT

Alteração INSERT INTO UPDATE DELETE FROM

Page 6: Curso de Linguagem Java

6

Introdução à Linguagem SQL SELECT

SELECTSELECT colunas FROMFROM tabelas WHEREWHERE critério Exemplos:

SELECT * FROM clienteSELECT Nome, Tel FROM ClienteSELECT 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

Page 7: Curso de Linguagem Java

7

Introdução à Linguagem SQL INSERT INTO

INSERT INTOINSERT INTO tabela (nomeCol1, nomeCol2...) VALUESVALUES (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’ ) )

Page 8: Curso de Linguagem Java

8

Introdução à Linguagem SQL UPDATE

UPDATEUPDATE tabela SETSET nomeCol1 = valor1, nomeCol2 = valor2... WHEREWHERE critério

Exemplos:UPDATE Pedido SET Preço = Preço * 1.1UPDATE Pedido SET Preço = Preço * 0.85

WHERE CodProd = ‘XYZ’

Page 9: Curso de Linguagem Java

9

Introdução à Linguagem SQL DELETE FROM

DELETEDELETE FROMFROM tabela WHEREWHERE critério

Exemplos:DELETE FROM Cliente WHERE CodCli = ‘001’

DELETE FROM Pedido WHERE Data < TO_DATE (’13-MAR-2001’, ‘DD-MON-YYYY’ )

Page 10: Curso de Linguagem Java

10

Mapeamento java.sql.Types para Java

long BIGINT

java.lang.String VARCHAR java.lang.String CHAR java.math.BigDecimal NUMERIC java.math.BigDecimal DECIMAL double DOUBLE double FLOAT float REAL

int INTEGER short SMALLINT byte TINYINT boolean BIT

Tipo JavaTipo JavaTipo SQL Tipo SQL (java.sql.Types)(java.sql.Types)

Page 11: Curso de Linguagem Java

11

Mapeamento java.sql.Types para Java (cont.)

byte[ ] BINARY

java.sql.Struct STRUCT java.sql.Ref REF java.sql.Array ARRAY java.sql.Clob CLOB java.sql.Blob BLOB byte[ ] LONGVARBINARY byte[ ] VARBINARY

java.sql.Timestamp TIMESTAMP java.sql.Time TIME java.sql.Date DATE java.lang.String LONGVARCHAR

Tipo JavaTipo JavaTipo SQL Tipo SQL (java.sql.Types)(java.sql.Types)

Page 12: Curso de Linguagem Java

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

Page 13: Curso de Linguagem Java

13

Conectividade de Banco de Dados

Etapas da Programação JDBC1. Importar java.sql.*2. Carregar Driver JDBC3. Especificar um Banco de Dados4. Abrir uma conexão com o Banco de

Dados5. Criar um Statement (comando)6. Submeter um comando SQL7. Receber os resultados

Page 14: Curso de Linguagem Java

14

Conectividade de Banco de Dados

Etapa 1 – Importar o Pacote java.sqlimport 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” );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

Page 15: Curso de Linguagem Java

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:subnameonde: jdbc – Protocolo jdbc.

subprotocol – Mecanismo de conexãosubname – Fonte de Dados

Exemplo: String url = “jdbc:odbc:String url = “jdbc:odbc:db1db1”;”;

Etapa 4 – Abrir ConexãoConnection con = DriverManager.getConnection ( url, “user”, Connection con = DriverManager.getConnection ( url, “user”,

“senha” );“senha” );

Fonte de Dados

Page 16: Curso de Linguagem Java

16

Conectividade de Banco de Dados

Etapa 5 – Criar um Statement (comando)

Statement stmt = con.createStatement ( );Statement stmt = con.createStatement ( );

Etapa 6 – Submeter um comando SQLNeste exemplo, iremos submeter uma query.

String query = “SELECT * FROM tabela”;String query = “SELECT * FROM tabela”;

ResultSet rs = stmt.executeQuery ( query );ResultSet rs = stmt.executeQuery ( query );

Page 17: Curso de Linguagem Java

17

Conectividade de Banco de Dados

Etapa 7 – Receber os resultadosNo 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 );Resultset rs = stmt.executeQuery ( query );while ( rs.next ( ) ) {while ( rs.next ( ) ) {// primeira coluna// primeira colunaSystem.out.println ( rs.getString( 1 ) );System.out.println ( rs.getString( 1 ) );// segunda coluna// segunda colunaSystem.out.println ( rs.getString( 2 ) );System.out.println ( rs.getString( 2 ) );}}

Page 18: Curso de Linguagem Java

18

Conectividade de Banco de Dados

import java.sql.*;public class Conexao {

public static void main ( String args [ ] ) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriversun.jdbc.odbc.JdbcOdbcDriver");

String url = "jdbc:odbc:fonteDadosjdbc:odbc:fonteDados"; Connection con = DriverManager.getConnection(url, "usuáriousuário", "senhasenha"); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabelanomeTabela ORDER BY nomeCamponomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) {System.out.println( rs.getString(2) + rs.getString("nomeCamponomeCampo") ); } } catch (Exception e) { System.out.println ( e ); }}

}

Programa exemplo para testar uma conexão.Exibe os dados de

uma tabela

Usando uma fonte de dados ODBC.

Page 19: Curso de Linguagem Java

19

Conectividade de Banco de Dados

import java.sql.*;public class Conexao {

public static void main ( String args [ ] ) { try { Class.forName("com.mysql.jdbc.Drivercom.mysql.jdbc.Driver");

String url = "jdbc:mysql://127.0.0.1:3306/nomeBancojdbc:mysql://127.0.0.1:3306/nomeBanco"; Connection con = DriverManager.getConnection(url, "usuáriousuário", "senhasenha"); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabelanomeTabela ORDER BY nomeCamponomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) {System.out.println( rs.getString(2) + rs.getString("nomeCamponomeCampo") ); } } catch (Exception e) { System.out.println ( e ); }}

}

Programa exemplo para testar uma conexão.Exibe os dados de

uma tabela

Usando o MySQL.

Page 20: Curso de Linguagem Java

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.SQLServerDrivercom.microsoft.sqlserver.jdbc.SQLServerDriver");

String url = "jdbc:sqlserver://127.0.0.1;" + "jdbc:sqlserver://127.0.0.1;" + "databaseName=nomeBanco;" + "databaseName=nomeBanco;" + "user=usuário;password=senha"user=usuário;password=senha""; Connection con = DriverManager.getConnection(url); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabelanomeTabela ORDER BY nomeCamponomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) {System.out.println( rs.getString(2) + rs.getString("nomeCamponomeCampo") ); } } catch (Exception e) { System.out.println ( e ); }}

}

Programa exemplo para testar uma conexão.Exibe os dados de

uma tabela

Usando o SQLServer2005.

Page 21: Curso de Linguagem Java

21

Usando o MySQLOs 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

Page 22: Curso de Linguagem Java

22

Instalação do MySQL (no Windows)

O MySQL pode ser obtido no site http://www.mysql.comhttp://www.mysql.com

Descompacte o arquivo mysql-4.0.16-win.zipmysql-4.0.16-win.zip em um diretório qualquer como c:\mysqlinstc:\mysqlinst

Execute o arquivo setup.exesetup.exe, escolha o diretório padrão c:\mysqlc:\mysql e a instalação típicainstalação típica

Abra uma janela do DOS e vá para o diretório c:\c:\mysql\binmysql\bin

Execute o comando winmysqladmin.exewinmysqladmin.exe para que o servidor seja carregado. Na primeira execução desse programa será pedido um nome de usuário e senha.

Page 23: Curso de Linguagem Java

23

Criação de banco de dados com MySQL Inicie o cliente MySQL monitor:

c:\mysql\bin> mysql –umysql –u<usuário> -p-p<senha> Crie um banco de dados:

mysql > create databasecreate database pessoal; Torne o banco de dados ativo:

mysql > useuse pessoal; Crie uma tabela:

mysql > create tablecreate table agenda (-> id INT NOT NULL AUTO_INCREMENTINT NOT NULL AUTO_INCREMENT,-> nome VARCHARVARCHAR(30),-> telefone VARCHARVARCHAR(30),-> PRIMARY KEYPRIMARY KEY (id)) ;

Insira alguns registros:mysql > INSERT INTOINSERT INTO agenda VALUESVALUES (1, “Maria”, “4444-4444”) ;

Exiba os registros inseridos:mysql > SELECT * FROMSELECT * FROM agenda ORDER BYORDER BY nome ;

Encerre o cliente:mysql > exitexit;

Page 24: Curso de Linguagem Java

24

Principais tipos de dados no MySQL

AAAAMMDDhhmmssTimestamp TIMESTAMPAAAA-MM-DD hh:mm:ss

Data e hora DATETIMEAAAA-MM-DDData DATEIgual a DOUBLEFlutuação

String DECIMAL

±2.225x10-308 a ±1.798x10+308

Flutuante dupla DOUBLE / REAL

±1.176x10-38 a ±3.403x10+38

Flutuante simples

FLOAT-263 a 263 - 1Inteiro grande BIGINT-27 a 27 - 1Int. muito peq. TINYINT-231 a 231 - 1Inteiro normal INTIntervalo/FormatoIntervalo/FormatoDescriçãoDescriçãoTipo de Tipo de

dadodado

Page 25: Curso de Linguagem Java

25

Principais tipos de dados no MySQL (cont.)

De 0 bytes a 4MB de extensão

Campo de texto longo

LONGTEXT

De 0 65.535 bytes de extensão

Campo de texto

TEXT

De 0 bytes a 4MB de extensão

BLOB de tamanho grande

LONGBLOB

De 0 65.535 bytes de extensão

Objeto binário grande

BLOB

De 0 a 255 caracteres

String de tamanho variável

VARCHAR

De 0 a 255 caracteres

String de tamanho fixo

CHARIntervalo/FormatoIntervalo/FormatoDescriçãoDescriçãoTipo de Tipo de

dadodado

Page 26: Curso de Linguagem Java

26

Principais comandos do MySQL monitorOs comandos devem ser finalizados com “;” CREATE DATABASECREATE DATABASE

Cria um banco de dados. DROP DATABASEDROP DATABASE

Apaga um banco de dados CREATE TABLECREATE TABLE

Cria uma tabela no banco de dados ativo. SHOW DATABASESSHOW DATABASES

Exibe uma lista dos bancos de dados ativos. USEUSE

Seleciona um banco de dados como ativo. SHOW TABLESSHOW TABLES

Exibe as tabelas do banco de dados ativo. EXITEXIT

Encerra o monitor.Além dos comandos SQL padrão.

Page 27: Curso de Linguagem Java

27

Conexão com MySQL Instale o driver Connector/J descompactando o arquivo:

mysql-connector-java-3.1.0-alpha.zipmysql-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-mysql-connector-java-3.1.0-alpha.jaralpha.jar no Classpath.

Defina o driver em Class.forName ( ) como:"com.mysql.jdbc.Drivercom.mysql.jdbc.Driver"

Defina a URL de conexão como: "jdbc:mysql://127.0.0.1:3306/jdbc:mysql://127.0.0.1:3306/banco"onde banco é o nome do banco de dados.

Page 28: Curso de Linguagem Java

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-mysql-connector-java-3.1.0-alpha.jaralpha.jar no classpath do Eclipse. Para tanto, no Eclipse, Selecione o menu "ProjectProject" opção "PropertiesProperties", clique em "Java Build PathJava Build Path", selecione a aba "LibrariesLibraries", clique no botão "Add Add External Jars...External Jars..." selecione o arquivo mysql-mysql-connector-java-3.1.0-alpha.jarconnector-java-3.1.0-alpha.jar no diretório onde o driver Connector/J foi instalado, clique em "abrirabrir" e finalmente clique em "okok".

Page 29: Curso de Linguagem Java

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/

Page 30: Curso de Linguagem Java

30

Exercício Criar uma interface que grave registros

em uma tabela

Agenda

Nome:

Telefone:

Gravar

Page 31: Curso de Linguagem Java

31

Comandos JDBC (java.sql.Statement) Consulta

StatementStatement st = con.createStatementcreateStatement( );String sql = "SELECT * FROM tabela WHERE codigo =" + x;ResultSet rs = st.executeQueryexecuteQuery( sql );

InclusãoStatementStatement st = con.createStatementcreateStatement( );String sql = "INSERT INTO tabela (nome, cargo) " +"VALUES ( ‘ ‘ "+ vNome + " ‘ , ‘ "+ vCargo + " ‘ ) ";int res = st.executeUpdateexecuteUpdate( sql );

Page 32: Curso de Linguagem Java

32

Comandos preparados JDBC (java.sql.PreparedStatement) Consulta

String sql = "SELECT * FROM tabela WHERE codigo = ? "; PreparedStatementPreparedStatement pst = con.prepareStatementprepareStatement( sql );pst.setIntsetInt (1, x);ResultSet rs = pst.executeQueryexecuteQuery( );

InclusãoString sql = "INSERT INTO tabela (nome, cargo) " + "VALUES ( ?, ?) ";PreparedStatementPreparedStatement pst = con.prepareStatementprepareStatement( sql );pst.setStringsetString (1, vNome);pst.setStringsetString (2, vCargo);int res = pst.executeUpdateexecuteUpdate( );

Page 33: Curso de Linguagem Java

33

Conjuntos de Resultados ( ResultSet ) Os valores que definem o tipo de um ResultSetResultSet

são especificados no método createStatement ( ) createStatement ( ) ou no método prepareStatement ( ) prepareStatement ( )

Valores de Tipos de conjuntos TYPE_FORWARD_ONLYTYPE_FORWARD_ONLY

Conjunto de resultados não rolável. TYPE_SCROLL_INSENSITIVETYPE_SCROLL_INSENSITIVE

Conjunto de resultados rolável, mas não sensível às alterações do banco de dados.

TYPE_SCROLL_SENSITIVETYPE_SCROLL_SENSITIVEConjunto de resultados rolável e sensível às alterações do banco de dados.

Valores de Concorrência de conjuntos CONCUR_READ_ONLYCONCUR_READ_ONLY

Conjunto de resultado apenas para leitura. CONCUR_UPDATABLECONCUR_UPDATABLE

Conjunto de resultado atualizável.

JDBC 2.0

Page 34: Curso de Linguagem Java

34

API - JDBC Interface ConnectionConnection

void closeclose ( )Fecha uma conexão.

void commitcommit ( )Efetiva transação.

Statement createStatementcreateStatement ( )Cria um comando.

PreparedStatement prepareStatementprepareStatement (String sql)Cria um comando preparado.

void rollbackrollback ( )Cancela transação.

void setAutoCommitsetAutoCommit ( boolean b )Define a forma de efetivação dos dados.

Page 35: Curso de Linguagem Java

35

API - JDBC Classe DriverManagerDriverManager

Connection getConnectiongetConnection ( String url ) Connection getConnectiongetConnection ( String url, String usuário,

String senha )Obtém uma conexão com uma fonte de dados.

Interface StatementStatement void closeclose ( )

Encerra um comando. boolean executeexecute ( )

Executa o comando e retorna true se o resultado for um resultset ou false se for um contador de atualização.

ResultSet executeQueryexecuteQuery ( String comando )Executa um comando de pesquisa e retorna um resultset.

int executeUpdateexecuteUpdate ( String comando )Executa um comando de atualização e retorna o número de linhas atualizadas.

Page 36: Curso de Linguagem Java

36

API - JDBC Interface PreparedStatementPreparedStatement

void clearParametersclearParameters ( )Limpa os valores dos parâmetros do comando.

boolean executeexecute ( )Executa o comando e retorna true se o resultado for um resultset ou false se for um contador de atualização.

ResultSet executeQueryexecuteQuery ( )Executa o comando de pesquisa e retorna um resultset.

int executeUpdateexecuteUpdate (String sql)Executa o comando de atualização e retorna a quantidade de linhas atualizadas.

void setXXXsetXXX ( int i, XXX x )Ajusta o valor do parâmetro ii com o valor de xx.

Page 37: Curso de Linguagem Java

37

API - JDBC Interface ResultSetResultSet

boolean absoluteabsolute ( int row )Move o cursor para uma determinada linha.

void afterLastafterLast ( )Move o cursor para o final do ResultSet.

void beforeFirstbeforeFirst ( )Move o cursor para o início do ResultSet.

void cancelRowUpdatescancelRowUpdates ( )Cancela as atualizações feitas na linha atual.

void closeclose ( )Fecha o ResultSet.

Page 38: Curso de Linguagem Java

38

API - JDBC void deleteRowdeleteRow ( )

Exclui uma linha. boolean firstfirst ( )

Move o cursor para a primeira linha do ResultSet. XXX getXXXgetXXX ( int coluna )

Retorna o valor de uma coluna da linha corrente.Onde XXX é tipo de dado.

int getRowgetRow ( )Retorna o número da linha corrente.

void insertRowinsertRow ( )Insere o conteúdo da linha de inserção no banco de dados.

boolean isAfterLastisAfterLast( )Indica se o cursor está após a última linha do ResultSet.

Page 39: Curso de Linguagem Java

39

API - JDBC boolean isBeforeFirstisBeforeFirst( )

Indica se o cursor está antes da primeira linha do ResultSet. boolean lastlast ( )

Move o cursor para a última linha do ResultSet. void moveToInsertRow ( )

Move o cursor para a linha de inserção boolean nextnext ( )

Move o cursor para a próxima linha do ResultSet. boolean previousprevious ( )

Move o cursor para a linha anterior do ResultSet. boolean relativerelative ( int n )

Move o cursor n linhas, para a frente se n for positivo, ou para trás se n for negativo.

void updateXXXupdateXXX (int coluna, XXX dado )Define o valor de uma coluna na linha corrente.Onde XXX é o tipo de dado.

Page 40: Curso de Linguagem Java

40

Exercício Criar um simples cadastro de

funcionáriosCadastro de Funcionários

Nome:

Cargo:

Salário:

Primeiro Anteri

orPróximo Último

Novo Alterar Excluir Sair

Código:

xxx