Deletando registro após data vencida Mysql

MySQL

24/04/2017

Eu tenho uma tabela (Item) que possui um campo(data_cadastro), e gostaria que os registros dessa tabela fossem apagados automaticamente, 7 dias após essa data de cadastro.
Confiram a tabela no site www.aikachibihistory.com
eu já pesquisei a respeito, mas ainda não consegui criar um evento para isso, se alguém puder me ajudar com um exemplo
Michael Batista

Michael Batista

Curtidas 0

Respostas

Michael Batista

Michael Batista

24/04/2017

subindo
GOSTEI 0
Lincon Silva

Lincon Silva

24/04/2017

Michael, você já pensou em criar um Event? ele é similar ao JOB no SQl Server

Segue um exemplo que peguei na WEB.

ALTER EVENT purge_erroritem
ON SCHEDULE EVERY 1 DAY
COMMENT 'Apaga registros com mais de 7 dias!'
DO
BEGIN
{*
AQUI VOCE COLOCA SEU COMANDO DE DELETE DOS REGISTROS COM 7 DIAS
*}

END|

delimiter ;


Vale lembrar que esse comando tá configurado pra rodar diariamente, você verifica pelo comando [ ON SCHEDULE EVERY 1 DAY].

Me avisa se isso te atender Mestre.. Boa tarde e abraços.
GOSTEI 0
Michael Batista

Michael Batista

24/04/2017

esse é o grande problema, o comando de delete
criar um evento é facil, mas agora pegar uma data e somar 7 dias, até hoje nunca descobri como
GOSTEI 0
Cesar Azeredo

Cesar Azeredo

24/04/2017

Não sei no sql server, mas no oracle existe o sysdate que retorna a data da maquina, ai seria colocar no where a clausula (sysdate-datacadatro)>7
GOSTEI 0
Michael Batista

Michael Batista

24/04/2017

Já que pelo sql está dificil que tal pelo java?
se eu conseguir criar uma variável data_vencida que faça essa soma de 7 dias na data_cadastro, eu posso criar facilmente o evento no sql para deletar, atualmente uso o seguinte método

try {
			con = getConnection();
			st = con.createStatement();

			PreparedStatement preparedStatement = con.prepareStatement(
			"insert into item (cod_id ,cod_icone, nome_item, servidor, refinacao, vendedor,"
			+ "preco, descricao, data_cadastro, data_vencimento) values(?,?,?,?,?,?,?,?,?,?)");
			preparedStatement.setInt(1, item.getCod_id());
			preparedStatement.setString(2, item.getCod_icone());
			preparedStatement.setString(3, item.getNome_item());
			preparedStatement.setString(4, item.getServidor());
			preparedStatement.setString(5, item.getRefinacao());
			preparedStatement.setString(6, item.getVendedor());
			preparedStatement.setString(7, item.getPreco());
			preparedStatement.setString(8, item.getDescricao());
			preparedStatement.setDate(9, new java.sql.Date(new Date().getTime()));
			preparedStatement.setDate(10, new java.sql.Date(new Date().getTime()));
			preparedStatement.execute();
			return true;
			
		}

alguém sabe como somar essa data no java?
GOSTEI 0
Lincon Silva

Lincon Silva

24/04/2017

esse é o grande problema, o comando de delete
criar um evento é facil, mas agora pegar uma data e somar 7 dias, até hoje nunca descobri como


Mestre, bom dia.

creio que esse comando te atende

where Date < DATE_SUB(CURDATE(),INTERVAL 7 DAY);

abraços
GOSTEI 0
Michael Batista

Michael Batista

24/04/2017

Não entendi bem como usar esse comando, mas pelo que eu observei se funcionar só vai apagar e não indicar ao usuario o dia em que isso irá acontecer

vamos passo a passo
1- preciso que a variável data_ vencimento receba data_castro+7, no ato do cadastro, para que o usuário sabia o dia em que seu registro irá expirar
2- criar um evento diário com a função:
se data atual = data vencimento, apague o registro
GOSTEI 0
Michael Batista

Michael Batista

24/04/2017

eu tentei algo assim no java
preparedStatement.setDate(9, new java.sql.Date(new Date().getTime()));
preparedStatement.setDate(10, new java.sql.Date(new Date().getTime()+7));
mas não deu certo, não acusou erro no console, mas gerou uma data aleatória

se funcionasse eu teria a data de vencimento registrada no banco e com ela eu poderia criar o evento
GOSTEI 0
POSTAR