Sie sind auf Seite 1von 15

AJ3 – Classes Utilitárias, Collection e JDBC

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

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


Índice

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

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


AJ3 – Classes Utilitárias, Collection e JDBC

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 primitivo Wrapper class


boolean java.lang.Boolean
char java.lang.Character
byte java.lang.Byte
short java.lang.Short
int java.lang.Integer
long java.lang.Long
float java.lang.Float
double 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.

Anotações

3
1 Classes Utilitárias

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

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


AJ3 – Classes Utilitárias, Collection e JDBC

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)

Anotações

5
1 Classes Utilitárias

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

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


AJ3 – Classes Utilitárias, Collection e JDBC

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

Anotações

7
1 Classes Utilitárias

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

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


AJ3 – Classes Utilitárias, Collection e JDBC

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

Anotações

9
1 Classes Utilitárias

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)


data.getYear()
Ano valor do ano – 1900
data.setYear( 106 )
0 = janeiro, 1 = fevereiro, ... , data.getMonth()
Mês
11 = dezembro data.setMonth( 0 )
data.getDate( )
Dia do Mês : 1 a 31
data.setDate( 19 )
0 = domingo, 1 = segunda, ..., data.getDay()
Dia da Semana
6 = sábado (não existe setter)
data.getDate( )
Horas 0 a 23
data.setDate( 16 )
data.get:Minutes( )
Minutos 0 a 59
data.setMinutes( 32 )
data.getSecond( )
Segundos 0 a 59
data.setSeconds( 55 )

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


AJ3 – Classes Utilitárias, Collection e JDBC

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

Anotações

11
1 Classes Utilitárias

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.

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


AJ3 – Classes Utilitárias, Collection e JDBC

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

}
}

Anotações

13
1 Classes Utilitárias

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
0 = janeiro, 1 = fevereiro, ... 11 =
Calendar.MONTH Númeto do mês
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
Número do dia no mês 1 a 31
Calendar.DAY_OF_MONTH
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

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


AJ3 – Classes Utilitárias, Collection e JDBC

Conhecendo estas constates é possível manipualr os métodos:

Método Descrição Exemplos


int minutos =
cal.get(Calendar.MINUTE);
get(int campo) Captura um campo específico
int mes = cal.get(Calendar.MONTH)

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

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


cal.add(Calendar.YEAR,-3); // - 3 anos
Acrescenta determinadas cal.set(Calendar.DAY_OF_MONTH, 10);
quantidades de tempo à data cal.set(Calendar.HOUR_OF_DAY, 21);
add(int campo,
contida no objeto Calendar. cal.add(Calendar. HOUR_OF_DAY, 5);
int valor)
Realiza ajustes implícitos em // + 5 horas
todos com campos // o objeto cal epresentar
// as 2 da madrugada do dia 11

// dia 10 as 21h
Acrescenta determinadas cal.set(Calendar.DAY_OF_MONTH, 10);
quantidades de tempo à data cal.set(Calendar. HOUR_OF_DAY, 21);
contida no objeto Calendar.
roll( int campo,
O campo modificado sofre cal.roll(Calendar. HOUR_OF_DAY, 5);
int valor )
alterações em ciclos // + 5 horas
Não realiza ajustes implícitos // o objeto cal representa
nos demais campos. // as 2 da madrugada do dia 10

Anotações

15