Curso de Linguagem Java

Post on 14-Mar-2016

45 views 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 of Curso de Linguagem Java

1

Curso de Linguagem Java

Marcos Mendes

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 JDBCPrograma Java

API JDBC(java.sql)

Driver JDBC

BancoDe Dados

Comandos SQL

5

Introdução à Linguagem SQL Consulta

SELECT

Alteração INSERT INTO UPDATE DELETE FROM

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

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’ ) )

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’

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’ )

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)

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)

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 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

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

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

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 );

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 ) );}}

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.

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.

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.

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

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.

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;

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

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

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.

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.

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".

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

Agenda

Nome:

Telefone:

Gravar

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 );

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( );

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

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.

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.

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.

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.

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.

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.

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