我有这个要求,我必须每5小时创建一个临时表。因此,如果我在上午9点创建了一个表,则需要在下午1点使用相同的架构和所有内容创建相同的表(课程的差异名称),对第一个表进行一些操作,然后将其删除。每5个小时就会重复一次。
如何进行Java更改,因为这涉及SQL创建新表,从旧表获取数据,执行某些任务然后删除旧表?
答案 0 :(得分:2)
通常有四种不同的方式来定期运行任务:
如果您未使用上述任何框架,则可以使用带有timer
和ScheduledExecutorService
的本机Java进行以下演示,该演示将间隔运行从13:00 pm
开始的任务之5 hours
:
public class PeriodicTask {
public static void main(String... args) {
// System.out.println(LocalTime.ofSecondOfDay(getDelayTo(15, 4)));
// System.out.println(LocalTime.ofSecondOfDay(getDelayTo(16, 4)));
// testTimer();
// testScheduledExecutorService();
System.out.println(TimeUnit.DAYS.toSeconds(1));
}
private static long getDelayTo(int hour, int minute) {
LocalDateTime currentTime = LocalDateTime.now();
long gapToSpecified = ChronoUnit.SECONDS.between(currentTime, LocalDate.now().atTime(hour, minute));
if (gapToSpecified < 0) { // the time already passed => do it tomorrow;
return ChronoUnit.SECONDS.between(currentTime, LocalDate.now().plusDays(1).atTime(hour, minute));
}
return gapToSpecified; // not passed, do it later today at the specified time;
}
public static void testTimer() {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
System.out.println(LocalDateTime.now());
System.out.println("Hello world");
}
}, getDelayTo(13, 0), TimeUnit.HOURS.toSeconds(5));
}
public static void testScheduledExecutorService() {
Executors.newScheduledThreadPool(1).scheduleWithFixedDelay(() -> {
System.out.println("Hello World!");
}, getDelayTo(13, 0), TimeUnit.HOURS.toSeconds(5), TimeUnit.SECONDS);
}
}
答案 1 :(得分:1)
使用计时器按设置的时间间隔执行查询。
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
//ToDo
}
}, c.getTime(), 18000000);
// 5hrs == 18000000ms
如果表名始终相同,那么我建议您使用TRUNCATE
语句,而不要删除并创建表。
TRUNCATE TABLE table_name;
答案 2 :(得分:0)
在SQL Server中,通过首先使用drop table创建过程并创建表查询,与使用while循环每五个小时创建表的操作相同:
create procedure fivehourjob
as
begin
drop table sample
create table sample (sample_id int)
end
go
WHILE 1=1
BEGIN
EXEC dbo.fivehourjob
WAITFOR DELAY '05:00:00.000';
END
go
上面的查询连续运行,并每五小时提供一次表创建的输出:
否则,通过创建过程来简化操作,并每5小时使用调度程序调用一次过程。
Docs。