Pegar o registro do ultimo dia, data

15 respostas
Paulinha_NEXT

Olha pessoal mais uma vez eu!

bom, estou com um problema em pegar um valor de uma data e diminuir 1 dia aproximadamente, pode ser 24 horas, 3600 min o jeito que for rssss.

Jah nao consigo com o comando SQL pq qdo coloco - 1 ele ransforma em string ( no mysql) e tira 1 segundo, mas independentemente disso nao posso calcular isso no select, pq o sistema tem que conectar com qualquer banco, por isso nao posso usar funcao de nenhum banco.

Tem alguma forma de pegar o max(date) colocar no util.date e nele diminuir 1 dia e depois colocar em outro select usando a variavel armazenada, nao consegui fazer isso, alguem tem uma funcao para isso?

Se puder postar acho que vai ajudar muita gente, muito agradecida!
help!!! :?

15 Respostas

andre_a_s

Dá uma olhada no método roll e o método add da classe Calendar :wink:

J
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;


public class TesteData {

	public static void main(String args[]) {
		GregorianCalendar gc = new GregorianCalendar();
                //data atual do sistema
		gc.setTime(new Date());
		System.out.println(gc.getTime());
                //adiciona um dia à data atual
		gc.roll(Calendar.DATE, -1);
		System.out.println(gc.getTime());
	}
	
}
L

ela pediu pra retirar um dia e não somar um dia… utilize o método roll e nã o add

Paulinha_NEXT

desculpa nao compreendi :frowning: nunca usei ele, tentei usar e nao deu nada… soh alguns erros, como iniciante aqui, vou colocar oq eu fiz, pra ver se esclarece.

Connection conexao = dao.getConnection();
		Date dataAux;
		Double totalHD = 0.01;;
		Double totalHD1 = 0.01;
		Double totalHD2 = 0.01;
		try {
			String SQL ="SELECT max(st_ultimo_inv) as dataaux FROM estacao ";	 		
			PreparedStatement ps = conexao.prepareStatement(SQL);
			ResultSet resultado = ps.executeQuery();

			while(resultado.next()){
				dataAux  = resultado.getDate("dataaux");
				}

			resultado.close();	//Fecha o resultSet para liberar recursos alocados

com isso eu pego a data do ultimo registro porem nao consigo diminuir o 1 dia.

agradeço aos que responderam , e por favor tenham um pouco de paciencia :wink:

Paulinha_NEXT

eu cheguei ate isso:

String SQL ="SELECT max(dt_ultimo_inv) as dataaux FROM estacao ";	 		
			PreparedStatement ps = conexao.prepareStatement(SQL);
			ResultSet resultado = ps.executeQuery();

			while(resultado.next()){
				dataAux  = resultado.getDate("dataaux");
				}
			Calendar c = Calendar.getInstance();
			c.setDate(dataAux); // erro no setDate
			c.roll(Calendar.DATE, -1);
			dataAux = c.getDate(); //erro no getDate
			resultado.close();

fiz comentario dos 2 erros… parece que falta algum import mas nao sei qual eh… :frowning:

Luiz_Aguiar

faltando import? que erro esta dando Paula?

Paulinha_NEXT
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Date;  
import java.util.Calendar;


import db.DAO;
import db.DAOException;

public class AlertaGeralDAO 
{
	private DAO dao;
	
	public AlertaGeralDAO(){
		dao = DAO.getInstance();
	}


	public Double getAlertaGeralHD() throws DAOException
	{
		Connection conexao = dao.getConnection();
		Date dataAux;
		Double totalHD = 0.01;;
		Double totalHD1 = 0.01;
		Double totalHD2 = 0.01;
		try {
			String SQL ="SELECT max(dt_ultimo_inv) as dataaux FROM estacao ";	 		
			PreparedStatement ps = conexao.prepareStatement(SQL);
			ResultSet resultado = ps.executeQuery();

			while(resultado.next()){
				dataAux  = resultado.getDate("dataaux");
				}
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(dataAux);
            calendar.add(Calendar.DATE, -1);
            dataAux = calendar.getTime();

jah descobri que nao existe o setDate e o getDate no Calendar por isso evolui para isso ai.

agora sim nao sei onde ta o erro.

diz assim
“dataAux = calendar.getTime();” “Type mismatch: cannot convert from Date to Date”

Luiz_Aguiar
import java.sql.Date;

Paula, utilize:

import java.util.Date;

:slight_smile:

Paulinha_NEXT

muitissimo obrigada luiz mas deu outro erro agora

calendar.setTime(dataAux);

“The local variable dataAux may not have been initialized”

andredeividi
SELECT DATE_ADD('1998-01-02', INTERVAL -1 DAY);

Espero ter ajudado

Luiz_Aguiar

Paulinha NEXT:
muitissimo obrigada luiz mas deu outro erro agora

calendar.setTime(dataAux);

“The local variable dataAux may not have been initialized”


vc precisa iniciar/instanciar a variável dataAux na sua declaração, pois se o resultado.next for falso, ela nunca receberá um valor.

Paulinha_NEXT

bom pessoal agradeço pela colaboracao que me deram, com certeza colocarei a resposta final pois haverá outroas como eu que precisarão disso

acho que conclui porem nao ta restornando um valor correto, deveria voltar um double em %. Antes dessa opercao de retornar 1 dia anterior e blablabla dava certo, agora fazendo com o que vcs fizeram parou de dar certo.

olha ai nosso resultado meninos:
public class AlertaGeralDAO 
{
	private DAO dao;
	
	public AlertaGeralDAO(){
		dao = DAO.getInstance();
	}


	public Double getAlertaGeralHD() throws DAOException
	{
		Connection conexao = dao.getConnection();
		Date dataAux = null;
		Double tot = 0.01;;
		Double tot1 = 0.01;
		Double tot2 = 0.01;
		try {
			String SQL ="SELECT max(dt_ultimo_inv) as dataaux FROM estacao ";	 		
			PreparedStatement ps = conexao.prepareStatement(SQL);
			ResultSet resultado = ps.executeQuery();

			while(resultado.next()){
				dataAux  = resultado.getDate("dataaux");
				}
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(dataAux);
            calendar.add(Calendar.DATE, -1);
            dataAux = calendar.getTime();			

            resultado.close();	//Fecha o resultSet para liberar recursos alocados 2007-05-11 16:29:50
			
		
			String SQL1 ="SELECT count(*) as total1 FROM estacao ";	 		
			PreparedStatement ps1 = conexao.prepareStatement(SQL1);
			ResultSet resultado1 = ps1.executeQuery();

			while(resultado1.next()){
				tot1  = Double.valueOf(resultado1.getFloat("total1"));
				}

			resultado1.close();	//Fecha o resultSet para liberar recursos alocados
			
			String SQL2 ="SELECT count(*) as total2 FROM estacao WHERE dt_ultimo_inv > '" + dataAux + "'";			
			PreparedStatement ps2 = conexao.prepareStatement(SQL2);
			ResultSet resultado2 = ps2.executeQuery();

			while(resultado2.next()){
				tot2  = Double.valueOf(resultado2.getFloat("total2"));
				}

			resultado2.close();	//Fecha o resultSet para liberar recursos alocados
			tot=tot2/tot1;
			return tot;

		}catch(Exception e){
			throw new DAOException(e.getMessage());
		}finally{
			/*
			 * Libera a conexão de volta para o Pool.
			 */
			try {
				conexao.close();
			}catch(SQLException e1){
				throw new DAOException(e1.getMessage());				
			}
		}
	}
}

Se alguem souber que raios ta acontecendo :oops:

Paulinha_NEXT

gente desculpa o codigo ta certinho , foi um problema de cache aqui que nao deixou eu ver o novo resultado, entao para quem precisa disso ta ai o codigo!

vlw a todos gujeiros! :wink:

Luiz_Aguiar

menos mal que era isso né Paula :slight_smile:

depois marque como [resolvido] o tópico fazendo favor
:wink:

Paulinha_NEXT

OPAAAA!! acho que tem uma observacao aqui pra fazer com minha pergunta!!

Esse metodo pode ser usado para campo datetime?

caso nao possa como resolveria com datetime?

(eu acho que nao hein!)

Criado 15 de maio de 2007
Ultima resposta 16 de mai. de 2007
Respostas 15
Participantes 6