SELECT MAX e ResultSet

Olá pessoal,

Estou fazendo algumas aplicações de teste e aprendizado.

Pois bem, fazendo um teste com o Microsoft Access 2003 estou passando por problemas.

Estou querendo pegar o ID máximo de meus contatos, e escrevi a seguinte linha de comando.

String sql = "SELECT MAX(c.ID) FROM CONTATOS c";

e estou querendo buscar essa informação de minha query. Então seguem as linhas abaixo:

ResultSet rs = stmt.executeQuery(); return rs.getLong("ID");

mas, está havendo um “SQLException: Coluna não encontrada”. O nome da coluna está correto. Não sei o que mais pode ser.
Alguém tem alguma sugestão?

Alternativas de correção

a)

 return rs.getLong("MAX(c.ID)");

b)

String sql = "SELECT MAX(c.ID) AS MAXID FROM CONTATOS c";
...
 return rs.getLong("MAXID");

Dica: Access não é banco de dados. Se puder, não use. (já rolaram cabeças aqui na empresa porque alguém achou que Access suportava acesso multi-usuário, o que ele nunca fez direito - isso faz 12 anos atrás, mas a Microsoft nunca vai consertar isso.)

Obrigado pela ajuda Thingol.

Estou utilizando Access por que é o único que posso utilizar para testes aqui na empresa. Terrível isso… mas de boa! vlw!

Pô Thingol, o Access realmente marcou uma época negra aí hein?

Será que não foi falta de conhecimento do banco e construíram um elefante branco que o próprio Access não suportou?

Eu já trabalhei com Access e foi coincidentemente há 12 anos atrás também e era multiusuário e nada demais aconteceu.

Era um .mdb num drive da rede e os .mdb locais que alimentavam a base, coisa simples.

O que acho ruim do Access:

  • Você não pode usá-lo remotamente de maneira simples (qualquer outro banco acessível via JDBC costuma sê-lo). Ou seja, se o seu sistema é em Java e tem de rodar em Linux, já não pode usar o Access sem ter de fazer muita ginástica ou pagar alguma coisa.
  • Para funcionar direitinho multi-usuário é preciso fazer certas coisas que os programadores normalmente não conseguem fazer sozinhos - ou seja, você acaba tendo de revisar muita coisa (limpar muita sujeira, falando mais francamente);
  • Ele estimula o uso de tipos de campos (como OLE) que não existem em outros bancos de dados, amarrando seu sistema eternamente ao Access.
  • Como é “de graça” (ou seja, vem com o MS Office), parece que é de graça (pelo menos pro seu chefe). E como é fácil de usar com outras linguagens (como VB e Delphi) normalmente ele acaba sendo a solução imposta.

A sim, seus exemplos são bem mais complexos do que um simples sistema base (Access) front-end (Access).

Eu não passei por isso, então não tive maiores problemas. Olhando por esse seus comentários realmente a coisa complica.

Só por curiosidade, um dos sistemas que desenvolvi em Access eu utilizava tabelas Oracle anexadas, via ODBC. Rodei uma consulta exclusão sobre uma dessas tabelas Oracle e adivinha o que o Access fez? Ele dropou a tabela, literalmente. Foi a primeira vez que tive que recorrer ao backup das fitas DAT na época, fora a mijada que veio à galope.