aj3 - classes utilitárias, collections e jdbc

15
AJ3 – Classes Utilitárias, Collection e JDBC Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados 1 Classes Utilitárias 3 1.1 Wrapper classes de tipos primitivos 3 1.1.1 Características comuns às Wrapper classes 4 1.1.2 Características da classe Boolean 6 1.1.3 Características da classe Character 6 1.1.4 Exemplos 7 1.1.5 Certificação Sun Certified Java Programmer (SCJP) 9 1.2 Manipulação de Datas 10 1.2.1 A classe java.util.Date 10 1.2.2 A classe java.util.Calendar 12 1.2.3 Formatação e Conversão de Datas 17 1.2.4 Laboratório 23 2 Coleções 24 2.1 Collections Framework 25 2.2 java.util.Collection 26 2.3 java.util.List 27 2.3.1 java.util.ArrayList 27 2.3.2 java.util.ArrayList e java.util.Vector 31 2.3.3 Laboratório 32 2.4 java.util.Set 33 2.4.1 java.util.HashSet 34 2.4.2 java.util.TreeSet 36 2.4.3 A interface java.lang.Comparable 37 2.4.4 A interface java.util.Comparator 41 2.4.5 A classe java.util.Collections 44 2.4.6 Laboratório 45 2.5 java.util.Map 46 2.5.1 java.util.HashMap 47 2.5.2 java.util.HashMap e java.util.Hashtable 51 2.5.3 Laboratório 52 2.6 Overview das interfaces 53 2.7 Certificação Sun Certified Java Programmer (SCJP) 54 3 Java Database Connectivity (JDBC) 55 3.1 Introdução 55 3.2 Design Patterns 56 3.2.1 Data Access Object (DAO) 56 3.3 Driver JDBC 58 3.4 O pacote java.sql 60 3.5 Conexões com o banco de dados 62 3.5.1 java.sql.DriverManager 63 3.5.2 java.sql.Connection 64 3.5.3 Obtendo uma conexão 65 3.5.4 Erros Comuns 67 3.5.5 Fechando a conexão 68 3.5.6 Laboratório 70 3.6 java.sql.Statement 71 3.6.1 Laboratório 77

Upload: fabiano-goes

Post on 14-Oct-2014

127 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: AJ3 - Classes Utilitárias, Collections e JDBC

AJ3 – Classes Utilitárias, Collection e JDBC

Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados

1 Classes Utilitárias 3

1.1 Wrapper classes de tipos primitivos 3 1.1.1 Características comuns às Wrapper classes 4 1.1.2 Características da classe Boolean 6 1.1.3 Características da classe Character 6 1.1.4 Exemplos 7 1.1.5 Certificação Sun Certified Java Programmer (SCJP) 9

1.2 Manipulação de Datas 10 1.2.1 A classe java.util.Date 10 1.2.2 A classe java.util.Calendar 12 1.2.3 Formatação e Conversão de Datas 17 1.2.4 Laboratório 23

2 Coleções 24

2.1 Collections Framework 25 2.2 java.util.Collection 26 2.3 java.util.List 27

2.3.1 java.util.ArrayList 27 2.3.2 java.util.ArrayList e java.util.Vector 31 2.3.3 Laboratório 32

2.4 java.util.Set 33 2.4.1 java.util.HashSet 34 2.4.2 java.util.TreeSet 36 2.4.3 A interface java.lang.Comparable 37 2.4.4 A interface java.util.Comparator 41 2.4.5 A classe java.util.Collections 44 2.4.6 Laboratório 45

2.5 java.util.Map 46 2.5.1 java.util.HashMap 47 2.5.2 java.util.HashMap e java.util.Hashtable 51 2.5.3 Laboratório 52

2.6 Overview das interfaces 53 2.7 Certificação Sun Certified Java Programmer (SCJP) 54

3 Java Database Connectivity (JDBC) 55

3.1 Introdução 55 3.2 Design Patterns 56

3.2.1 Data Access Object (DAO) 56 3.3 Driver JDBC 58 3.4 O pacote java.sql 60 3.5 Conexões com o banco de dados 62

3.5.1 java.sql.DriverManager 63 3.5.2 java.sql.Connection 64 3.5.3 Obtendo uma conexão 65 3.5.4 Erros Comuns 67 3.5.5 Fechando a conexão 68 3.5.6 Laboratório 70

3.6 java.sql.Statement 71 3.6.1 Laboratório 77

Page 2: AJ3 - Classes Utilitárias, Collections e JDBC

Índice

Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados

3.7 java.sql.ResultSet 79 3.7.1 Laboratório 85

3.8 java.sql.PreparedStatement 86 3.8.1 Laboratório 89

3.9 Trabalhando com chaves geradas (auto-increment) 90 3.10 MySQL 92

3.10.1 Instalação 92 4 Apêndice 93

4.1 Solução das questões preparatórias para certificação 93

Page 3: AJ3 - Classes Utilitárias, Collections e JDBC

AJ3 – Classes Utilitárias, Collection e JDBC

Anotações

33

1 Classes Utilitárias 1.1 Wrapper classes de tipos primitivos

wrapper = invólucro; capa; cobertura; envelope; papel de embrulho; fonte: Babylon online (www.babylon.com)

As wrapper classes foram projetadas na API Standart do Java para encapsular valores do tipo primitivo dentro de suas instâncias. Existe uma classe wrapper para cada tipo primitivo. Exemplos:

Um objeto da classe java.lang.Integer encapsula um valor int primitivo. Um objeto da classe java.lang.Boolean encapsula um valor boolean primitivo.

Tabela de wrapper Classes

Tipo primitivoboolean

char

byte

short

int

long

float

double

Wrapper classjava.lang.Boolean

java.lang.Character

java.lang.Byte

java.lang.Short

java.lang.Integer

java.lang.Long

java.lang.Float

java.lang.Double

A principal motivação para recorrer aos objetos wrappers é quando queremos trabalhar com valores primitivos mas estamos lidando com APIs que suportam somente objetos - seguem alguns exemplos:

Collections (mais adiante neste módulo) Reflection (apêndices do módulo AJ4) Sessões de usuários em aplicações web (módulo AJ5)

A freqüência de utilizaçãos dos wrappers é tão intensa que à partir do Java 1.5 os programadores podem contar com um poderoso recurso chamado “Auto-Boxing” que realiza conversões implícitas em tempo de compilação entre primitivos e wrappers.

Page 4: AJ3 - Classes Utilitárias, Collections e JDBC

1 Classes Utilitárias

Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados 44

Existem mais algumas situações de utilização dos wrappers:

Identificação dos tipos através da utilização do operador instanceof. O operador instanceof deve ser utilizado da seguinte forma: [objeto] instanceof [nomeclasse ou interface] Como os tipos primitivos não são objetos, não é possível utilizar o operador para identificar o seu tipo.

Conversão de tipos através dos métodos utilitários das wrapper classes.

As classes que encapsulam tipos primitivos oferecem diversos métodos para conversão de tipos. , por exemplo, de int para double, de String para int etc.

1.1.1 Características comuns às Wrapper classes

Hierarquia das wrappers numéricas

Todas as Wrapper classes que representam tipos primitivos numéricos são sub-classes de java.lang.Number.

Por isto, todas as wrapper classes numéricas Byte, Short, Integer, Long, Float e Double herdam os seguintes métodos da classe Number.

byte byteValue()

short shortValue()

int intValue()

long longValue()

float floatValue()

double doubleValue()

Page 5: AJ3 - Classes Utilitárias, Collections e JDBC

AJ3 – Classes Utilitárias, Collection e JDBC

Anotações

55

Construtores

Todas as wrapper classes tem um construtor que recebe como parâmetro um valor do tipo primitivo correspondente. Exemplo: Byte ( byte value )

Integer ( int value )

Todas as wrapper classes, com exceção da classe Character, possuem um construtor que recebe uma String. Exemplo: Boolean ( String value )

Integer ( String value )

Métodos

Todas as wrapper classes sobrescrevem os métodos equals e hashcode herdados da classe Object. Todas as wrapper classes, com exceção das classes Character e Boolean, possuem o método parseXXX , que recebe uma String e retorna o valor primitivo correspondente. Exemplo: int parseInt(String value)

double parseDouble(String value)

Modificadores

Todas as wrapper classes de tipos primitivos são final, ou seja, não podem ser estendidas e são imutáveis, tais como as Strings.

Interfaces

Todas as wrapper classes com exceção de Boolean implementam as interfaces: java.lang.Comparable (ordenação de objetos – AJ3) java.io.Serializable (cópia de objetos para fora da JVM – AJ4)

Page 6: AJ3 - Classes Utilitárias, Collections e JDBC

1 Classes Utilitárias

Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados 66

1.1.2 Características da classe Boolean A classe Boolean através de seu construtor de que aceita objetos String é capaz de armazenar o primitivo true sempre que a seqüência de caracteres contiver exatamente as letras T, R U, E em qualquer combinação de caixa alta / caixa baixa. Boolean x1 = new Boolean(“TruE”); // x1 encapsula true

Boolean x2 = new Boolean(“trUe”); // x2 encapsula true

Boolean x3 = new Boolean(“qualquer outra coisa”); // x3 armazena false

A classe Boolean possui duas constantes cujos valores são objetos para representar os primitivos true e false. O método booleanValue() recupera o primitive armazenado no objeto Boolean. Boolean y1 = Boolean.TRUE;

Boolean y2 = Boolean.FALSE;

boolean b1 = y1.booleanValue();

boolean b2 = y2.booleanValue();

1.1.3 Características da classe Character Encontramos nesta classe vários métodos static úteis para tarefas de manipulação de caracteres. Veja alguns exemplos: boolean b1 = Character.isLetter('a'); // true

boolean b2 = Character.isLetter('!'); // false

boolean b3 = Character.isDigit('2'); // true

boolean b4 = Character.isDigit('!'); // false

boolean b5 = Character.isLetterOrDigit('a'); // true

boolean b6= Character.isLetterOrDigit('!'); // false

boolean b7 = Character.isLetterOrDigit('2'); // true

boolean b8 = Character.isLowerCase('a'); // true

boolean b9 = Character.isUpperCase('a'); // false

char c1 = Character.toUpperCase('a'); // A

char c2 = Character.toUpperCase('!'); // !

O método charValue() recupera o primitivo char armazenado dentro do objeto wrapper. Character wrapperChar = new Character('z');

char primitivoChar = wrapperChar.charValue();

Page 7: AJ3 - Classes Utilitárias, Collections e JDBC

AJ3 – Classes Utilitárias, Collection e JDBC

Anotações

77

1.1.4 Exemplos

Exemplo: TesteWrapperClasses.java

package br.com.globalcode.wrapper; public class TesteWrapperClasses { public static void main(String[] args) { // Exemplo de utilizacao da classe Boolean System.out.println("\nExemplo de utilizacao da classe Boolean:"); Boolean b1 = new Boolean(true); Boolean b2 = new Boolean("true"); System.out.println("bb1 = " + b1.booleanValue()); System.out.println("bb2 = " + b2.booleanValue()); // Exemplo de utilizacao da classe Integer System.out.println("\nExemplo de utilizacao da classe Integer:"); Integer i1 = new Integer(12); Integer i2 = new Integer("12"); System.out.println("i1 = " + i1.intValue()); System.out.println("i2 = " + i2.intValue()); String binaryString = Integer.toBinaryString(23); System.out.println("23 (em numero binario) = " + binaryString); int i3 = Integer.parseInt("12456"); // Exemplo de utilizacao da classe Double System.out.println("\nExemplo de utilizacao da classe Double:"); Double d1 = new Double(45.9); Double d2 = new Double("45.5"); System.out.println("d1 = " + d1.doubleValue()); System.out.println("d2 = " + d2.doubleValue()); // Utilizando o metodo intValue para transformar um double em int System.out.println("d1 (int) = " + d1.intValue()); // Exemplo de utilizacao da classe Character System.out.println("\nExemplo de utilizacao da classe Character:"); Character c1 = new Character('1'); System.out.println("c1 = " + c1.charValue()); char c2 = '1'; boolean isDigit = Character.isDigit(c2); System.out.println(c2 + " é digito? " + isDigit); char c3 = 'a'; boolean isLetterOrDigit = Character.isLetterOrDigit(c3); System.out.println(c3 + " e digito ou letra? " + isLetterOrDigit); } }

Page 8: AJ3 - Classes Utilitárias, Collections e JDBC

1 Classes Utilitárias

Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados 88

Saída gerada pela execução da classe TesteWrapperClasses:

Page 9: AJ3 - Classes Utilitárias, Collections e JDBC

AJ3 – Classes Utilitárias, Collection e JDBC

Anotações

99

1.1.5 Certificação Sun Certified Java Programmer (SCJP) 1. What is the result of attempting to compile and run the program? class A {

public static void main (String args[]) {

byte primitiveByte = 1; // 1

Byte b1 = new Byte(primitiveByte); // 2

Byte b2 = new Byte(1); // 3

System.out.print(b1.byteValue() + b2.byteValue());

}

}

a) Prints: 2 b) Prints: 11 c) Compile-time error at 1 d) Compile-time error at 2 e) Compile-time error at 3 f) Run-time error 2. Compile-time errors are generate in which lines ? class A {

public static void main(String[] args) {

Boolean b1 = new Boolean(true); // 1

Boolean b2 = new Boolean(false); // 2

Boolean b3 = new Boolean(TRUE); // 3

Boolean b4 = new Boolean(FALSE); // 4

Boolean b5 = new Boolean("TrUe"); // 5

Boolean b6 = new Boolean("fAlSe"); // 6

}}

a) 1 b) 2 c) 3 d) 4 e) 5 f) 6

Page 10: AJ3 - Classes Utilitárias, Collections e JDBC

1 Classes Utilitárias

Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados 1100

1.2 Manipulação de Datas A seguir vamos conhecer as particularidades da manipulçõa de datas em Java.

1.2.1 A classe java.util.Date Esta classe acompanha a API Standart do Java desde a versão 1.0 e seus objetos são adequados para representar um instante no tempo. A partir da versão 1.1 foi introduzida a classe Calendar que oferece suporte à iternacionalização. Desde então a classe Date teve vários de seus métodos e construtores onsiderados obsoletos (deprecated). Estes métodos e construtores continuam funcionando para efeito de compatibilidade. Os objetos Date interpretam os campos ou componentes de tempo das datas através de números inteiros seguindo a convenção: Componente de Tempo interpretação Métodos de instância (deprecated)

Ano valor do ano – 1900 data.getYear()

data.setYear( 106 )

Mês 0 = janeiro, 1 = fevereiro, ... , 11 = dezembro

data.getMonth()

data.setMonth( 0 )

Dia do Mês : 1 a 31 data.getDate( )

data.setDate( 19 )

Dia da Semana 0 = domingo, 1 = segunda, ..., 6 = sábado

data.getDay()

(não existe setter)

Horas 0 a 23 data.getDate( )

data.setDate( 16 )

Minutos 0 a 59 data.get:Minutes( )

data.setMinutes( 32 )

Segundos 0 a 59 data.getSecond( )

data.setSeconds( 55 )

Page 11: AJ3 - Classes Utilitárias, Collections e JDBC

AJ3 – Classes Utilitárias, Collection e JDBC

Anotações

1111

Exemplo: TesteDate.java

package br.com.globalcode.testes;

import java.util.Date;

public class TesteDate {

public static void main(String[] args) {

// data atual Date agora = new Date();

System.out.println("agora: " + agora);

// data 01/jan/1970 00h00m00s + x milisegundos Date instanteX = new Date(1132023600000L);

System.out.println("instanteX: " + instanteX);

// capturando a diferenca (long) de milissegundos entre

// a o objeto date e 01/jan/1970 00h00m00s

System.out.println("x milissegundos: " + instanteX.getTime());

// 05/fev/1998 00h00m00s (construtor deprecated)

// parâmetros do construtor: ano, mês, dia

Date umaData = new Date(98, 1, 5);

System.out.println("umaData: " + umaData);

// 16/dez/2009 14h37m19s (construtor deprecated)

// parâmetros do construtor: ano, mês, dia, hora, min, seg

Date outraData = new Date(109, 11, 16, 14, 37, 19);

System.out.println("outraData: " + outraData);

// capturando informacoes parciais

// (metodos deprecated) int ano = outraData.getYear(); int mes = outraData.getMonth(); int diaDoMes = outraData.getDate(); int diaDaSemana = outraData.getDay(); int horas = outraData.getHours(); int minutos = outraData.getMinutes(); int segundos = outraData.getSeconds();

}

}

Page 12: AJ3 - Classes Utilitárias, Collections e JDBC

1 Classes Utilitárias

Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados 1122

Saída gerada pela execução da classe TesteDate:

1.2.2 A classe java.util.Calendar Calendar é a super-classe abstrata de uma família de sub-classes utilitárias para manipulação de datas. Esta hierarquia está projetada para que cada sub-classe ofereça recursos especializados para diferentes tipos de calendários. Há apenas uma sub-classe que acompanha o Java SE: a classe java.util.GregorianCalendar – que suporta o calendário gregoriano (e juliano) predominante no ocidente. Para obter uma instância de GregorianCalendar basta utilizar o método static getInstance( ) na classe Calendar. Sempre a data atual será atribuída ao objeto Calendar, O exemplo a seguir demonstra instanciações e manipulações básicas.

Page 13: AJ3 - Classes Utilitárias, Collections e JDBC

AJ3 – Classes Utilitárias, Collection e JDBC

Anotações

1133

Exemplo: TesteCalendarInstanciacao.java

package br.com.globalcode.testes;

import java.util.Calendar;

import java.util.Date;

public class TesteCalendarInstanciacao {

public static void main(String[] args) {

Calendar cal = Calendar.getInstance(); // captura a data atual Date data = cal.getTime(); // retorna um objeto java.util.Date

System.out.println("data em cal :" + data.toString());

long qtdMiliSec = cal.getTimeInMillis(); // instante atual

long _2horas = 2 * 3600 * 1000L; // 2 horas em milisegundos cal.setTimeInMillis(qtdMiliSec - _2horas); // voltar 2 horas

System.out.println("data ajustada em cal :" + cal.getTime().toString());

Calendar cal2 = Calendar.getInstance(); // captura a data atual Date data2 = cal2.getTime(); // retorna um objeto java.util.Date

System.out.println("data em cal2 :" + data2.toString());

data2.setYear(99); // 1999 cal2.setTime(data2); // configura nova data em cal2

System.out.println("data ajustada em cal2 :" + cal2.getTime().toString());

}

}

Page 14: AJ3 - Classes Utilitárias, Collections e JDBC

1 Classes Utilitárias

Copyright 2005 Globalcode – The Developers Company, todos os direitos reservados 1144

Saída gerada pela execução da classe TesteCalendarInstanciacao:

A classe Calendar oferece uma série de constantes numéricas que representam as informações parciais de uma data. Estas constantes são importantes para acionarmos os métodos disponíveis. Vejamos alguns exemplos: Constante Informação parcial de datas Convenções para GregorianCalendar Calendar.YEAR Número do ano

Calendar.MONTH Númeto do mês 0 = janeiro, 1 = fevereiro, ... 11 = dezembro

Calendar.WEEK_OF_YEAR Número da semana no ano 1 = 1ª. Semana , ..., 52 = última semana Calendar.WEEK_OF_MONTH Númeroda Semana no mês Calendar.DATE e

Calendar.DAY_OF_MONTH Número do dia no mês 1 a 31

Calendar.DAY_OF_WEEK Número do dia na semana 0 = domingo, ..., 6 = sábado Calendar.DAY_OF_YEAR Número do dia no ano 1 a 365 (ou 366) Calendar.HOUR_OF_DAY Horas 0 a 23 Calendar.MINUTE Minutos 0 a 59 Calendar.SECOND Segundos 0 a 59 Calendar.MILISECOND Milissegundos 0 a 999

Page 15: AJ3 - Classes Utilitárias, Collections e JDBC

AJ3 – Classes Utilitárias, Collection e JDBC

Anotações

1155

Conhecendo estas constates é possível manipualr os métodos: Método Descrição Exemplos

get(int campo) Captura um campo específico

int minutos =

cal.get(Calendar.MINUTE);

int mes = cal.get(Calendar.MONTH)

set(int campo) Modifica um campo específico cal.set(Calendar.DAY_OF_MONTH, 27);

cal.set(Calendar.HOUR, 16);

add(int campo,

int valor)

Acrescenta determinadas quantidades de tempo à data contida no objeto Calendar. Realiza ajustes implícitos em todos com campos

// dia 10 as 21h, 03 anos atras:

cal.add(Calendar.YEAR,-3); // - 3 anos

cal.set(Calendar.DAY_OF_MONTH, 10);

cal.set(Calendar.HOUR_OF_DAY, 21);

cal.add(Calendar. HOUR_OF_DAY, 5);

// + 5 horas

// o objeto cal epresentar

// as 2 da madrugada do dia 11

roll( int campo,

int valor )

Acrescenta determinadas quantidades de tempo à data contida no objeto Calendar. O campo modificado sofre alterações em ciclos Não realiza ajustes implícitos nos demais campos.

// dia 10 as 21h

cal.set(Calendar.DAY_OF_MONTH, 10);

cal.set(Calendar. HOUR_OF_DAY, 21);

cal.roll(Calendar. HOUR_OF_DAY, 5);

// + 5 horas

// o objeto cal representa

// as 2 da madrugada do dia 10