[resolvido]5 primeiros com java? e nao com TOP 5, LIMIT 5
13 respostas
Paulinha_NEXT
Olá Gujeiros,
Bom minha duvida pode ser simples…
Como eu recupero apenas os 5 primeiros (TOP 5 - SQLServer, LIMIT 5 MySQL, xxx Oracle…) mas sem usar as funçoes no comando SQL? Meu sistema trabalha para todos os bancos de dados, por isso eh necessario, acho que ajuda a muita gente tambem!
P.S.: O seu sistema não possui uma camada DAO?! Se sim, você pode fazer um teste, dependendo da instância do banco que for retornada, utilizar a cláusula select certa para você
nbluis
Funciona ok.
Mas os algoritimos de query no oracle são mais performaticos.
Paulinha_NEXT
nao tiago acho que isso nao funciona… vou mostra o meu codigo funcionando para MySQL ai vcs da uma olhada e irão entender pq e como ta feito.
ps: esse ai jah funciona perfeitamente, a duvida eh como fazer sem usar functions no MySQL ou de qualquer outro banco como o “LIMIT 5” nesse caso.
publicObjectproduceDataset(Maparg0)throwsDatasetProduceException{// Criando um Dataset para o gráficoDefaultPieDatasetds=newDefaultPieDataset();PreparedStatementps=null;Connectionconexao=null;try{conexao=dao.getConnection();//alterar a string SQLStringSQL="SELECT cpu.proc_max_speed, COUNT(cpu.proc_max_speed) as qtde FROM estacao as cpu "+"GROUP BY cpu.proc_max_speed "+"LIMIT 5";// Recupera uma conexão com o bancops=conexao.prepareStatement(SQL);ResultSetrs=ps.executeQuery();while(rs.next()){// Inserindo no DataSet o estado e a quantidade de pessoas certificadasds.setValue(rs.getString(1),newDouble(rs.getInt(2)));}rs.close();//Fecha o resultSet para liberar recursos alocados}catch(Exceptione){newDatasetProduceException(e.getMessage());}finally{/* * Libera a conexão de volta para o Pool. */try{conexao.close();}catch(SQLExceptione1){newDatasetProduceException(e1.getMessage());}}// retorna o DataSetreturnds;}// O dados deste dataset é invalidado imediatamente.// O tempo de retorno influencia no cachê de dados do cewolf// Retornando sempre true, os dados do dataset são sempre atualizados a cada request.publicbooleanhasExpired(Maparg0,Datearg1){returntrue;// Se quiséssemos que os dataset expirasse em 5 segundos colocaríamos// return (System.currentTimeMillis() - since.getTime()) > 5000;}// Retorna um Id único para este datasetpublicStringgetProducerId(){return"CPUGrafico";}
:oops:
Luiz_Aguiar
set rowcount ? :roll:
Paulinha_NEXT
como funciona esse set rowcount? pode falar como eu colocaria?
L
luidhi
Bem isso não existe no ANSI SQL 99.
Você terá que fazer uma gâmbia.
Sugiro que vc faça uma view na base de dados incluindo um campo com contagem de campos.
Assim vc evita mexer no seu código.
Mas porque não pode ser o comando do sql proprietário? Você vai mudar tanto de banco assim?
Luiz_Aguiar
SET ROWCOUNT 5
SELECT * FROM GUJ WHERE USER = LUIZ
SET ROWCOUNT 0
ou
SELECT * FROM GUJ WHERE USER = LUIZ AND ROWCOUNT <= 5
L
luidhi
Luiz Aguiar:
SET ROWCOUNT 5
SELECT * FROM GUJ WHERE USER = LUIZ
SET ROWCOUNT 0
ou
SELECT * FROM GUJ WHERE USER = LUIZ AND ROWCOUNT <= 5
:)
Que banco isso funciona?
Paulinha_NEXT
isso eh padrao SQL???
todos os bancos aceitam???
marcushlm
set rowcount não funciona realmente pra todos os bancos…
se vai ser necessário uma abstração tão grande do banco a ser utilizado eu sugiro que você use hibernate mesmo.
Paulinha_NEXT
pois eh! nao deixaram usar… falaram que isso no momento nao serve, pq ninguem aqui sabe mexer e teriam que treinar e etc…
:?
eu fiz isso:
publicObjectproduceDataset(Maparg0)throwsDatasetProduceException{// Criando um Dataset para o gráficoDefaultPieDatasetds=newDefaultPieDataset();PreparedStatementps=null;Connectionconexao=null;try{intcontador=0;conexao=dao.getConnection();//alterar a string SQLStringSQL="SELECT cpu.proc_max_speed, COUNT(cpu.proc_max_speed) as qtde FROM estacao as cpu "+"GROUP BY cpu.proc_max_speed ";// Recupera uma conexão com o bancops=conexao.prepareStatement(SQL);ResultSetrs=ps.executeQuery();while(rs.next()&&contador<=4){// Inserindo no DataSet o estado e a quantidade de pessoas certificadasds.setValue(rs.getString(1),newDouble(rs.getInt(2)));contador++;}rs.close();//Fecha o resultSet para liberar recursos alocados}catch(Exceptione){newDatasetProduceException(e.getMessage());}finally{/* * Libera a conexão de volta para o Pool. */try{conexao.close();}catch(SQLExceptione1){newDatasetProduceException(e1.getMessage());}}// retorna o DataSetreturnds;}// O dados deste dataset é invalidado imediatamente.// O tempo de retorno influencia no cachê de dados do cewolf// Retornando sempre true, os dados do dataset são sempre atualizados a cada request.publicbooleanhasExpired(Maparg0,Datearg1){returntrue;// Se quiséssemos que os dataset expirasse em 5 segundos colocaríamos// return (System.currentTimeMillis() - since.getTime()) > 5000;}// Retorna um Id único para este datasetpublicStringgetProducerId(){return"CPUGrafico";}