Archive for the 'java' Category


Foreach vs Iterator 0

Nós últimos dias tenho trabalhado bastante com coleções (collections) do java. Estava habituado a usar Iterator para varrer as coleções. Na versão do Java 5, houve a implementação do foreach para java que mudou a forma como iteramos sobre uma coleção.

Normalmente fazíamos da forma:


List objects = new ArrayList();
objects.add(obj1);
...
objects.add(objn);

Iterator it = objects.iterator();
while (it.hasNext()) {
Object o = it.next();
// do something with the object ‘o’
}

Quando precisamos realmente trabalhar com o objeto, precisamos de uma referência aquele objeto, caso contrário:


while (it.hastNext()) {
it.next().method1();
it.next().method2(); // could result exception
}

Neste caso it.next() lê o objeto corrente e incrementa um marcador para o elemento seguinte. Se usarmos o it.next() novamenete, estaremos trabalhando com outra referência, o que poderia ser um vazio ou um ponteiro nulo.

Por estes motivos a forma de iterar sobre coleções foi mudado para o foreach, que possui a seguinte implementação:


for (Object o : objects) {
// do something with the object 'o'
}

Na prática, quando compilamos o código o resultado do o foreach é o mesmo para a iteração do primeiro caso apresentado, onde criamos um marcador para referênciar o objeto da coleção lido. Usando o for-each trabalhamos de forma mais segura quando iteramos, resultando também num código mais legível, mantendo a tipagem sobre generics collections.

Se tiver dúvidas basta criar um código e compilá-lo.

Depois use o comando javap -c CompiledClass note que não há extensão .class

Relembrando, o uso de foreach só é válido na versão do Java 5+

update

Uma observação que gostária de fazer é a seguinte, alguns programadores gostam de usar a seguinte codifição para iteração:


for (Iterator it = objects.iterator(); it.hasNext(); ) {
Object o = it.next();
// do something
}

É uma opção de cada um, mas acredito que o uso do while fornece um legibilidade de código muito maior, o for ele tende a amontar muita informaçao numa unica linha o que prejudica a leitura. O resultado de compilação é o mesmo tanto para for como while, uma vez que o for é uma expansão para while, ou seja, durante o processo de compilação o bloco de código do for será convertido para o formato do while.

JDBC e SQLEXPRESS 2005 0

Comecei a usar o eclipse para trabalhar com java. Você começa fazendo aqueles programas básicos para conhecer o ambiente em que vai trabalhar. Ai chega na parte que toda aplicação usa, banco de dados.

Primeiro é necessário baixar o driver jdbc para SQL Server que pode ser encontrado na aqui.

Neste caso estou trabalhando com o SQL Server Express Edition 2005 que já estava instalado por ter usado o Visual Studio 2005 anteriormente.

No management studio tudo ok. Mas na hora de configurar um Data Source no eclipse… SEM RESPOSTA!

Um dos problemas básicos é que o SQL Express 2005 pode estar autenticando apenas através do Windows Authentication, que é o seu login no windows.

O que temos que fazer é habilitar o modo hibrido, de modo que seja aceito autenticação por SQL Server.

Vamos usar o Microsoft SQL Server Management Studio Express para gerenciar. Conecte ao servidor usando a sua conta do windows para autenticar.

Uma vez conectado clique com o botão direito sobre o servidor e em propriedades. Será aberta a janela Server Properties, vá no item Security e marque a opcao Server Authentication > SQL Server and Windows Authentication. Clique em OK.

Antes de reiniciarmos o serviço teremos que adicionar uma conta SQL Server. Existe a conta sa por default mas é recomendável criar outra.

Na árvore do servidor, clique em Security > Logins > New Login… Cadastre uma nova conta SQL Server. Salve e agora reinicie a aplicação.

Entretanto isso não é o suficiente para usarmos o SQL Server Express 2005, por que ele não está habilitado para conexões TCP/IP que é o que usaremos no JDBC. Para habilitarmos usaremos o SQL Server Configuration Manager que se encontra em: Start > All Programs > Microsoft Server 2005 > Configuration Tools > SQL Server Configuration Manager.

Selecione SQL Server 2005 Network Configuration > Protocols for SQLEXPRESS > TCP/IP > Properties. Na aba Protocol marque enable = yes e na aba IP Addresses coloque o que tiver IP 127.0.0.1 com:

  • active e enable: Yes
  • TCP Dynamic Ports: 0
  • TCP Port: 1433

Se você vai trabalhar apenas na sua máquina sem que outra pessoa utilize, use apenas o IP 2, e mantenha o IP1 desabilitado. O que ele representa é que ele habilitará a sua interface de rede para conexões com o servidor.

Uma vez finalizado reinicie o serviço.

Para configurar o JDBC agora basta usar a url jdbc:sqlserver://localhost\SQLEXPRESS e o usuário e senha que você criou.

Pronto, agora você já pode usar o SQL Server.