package com.github.windbender.service; import java.sql.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.jdbc.Work; import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MakeDatesService { Logger log = LoggerFactory.getLogger(MakeDatesService.class); public MakeDatesService(SessionFactory sf) { this.sessionFactory = sf; } private SessionFactory sessionFactory; final DateTime minDate = new DateTime(2013,01,01, 0, 0); final DateTime biggestDate = new DateTime(2020,01,01,0,0); public void makeDates() { Session session = null; try { session = sessionFactory.openSession(); session.doWork(new Work() { @Override public void execute(java.sql.Connection connection) { try { PreparedStatement psd = connection.prepareStatement("delete from dates"); int rows = psd.executeUpdate(); DateTime maxDate = null; // PreparedStatement ps = connection.prepareStatement("select max(dates) from dates"); // ResultSet rs = ps.executeQuery(); // while(rs.next()) { // Date date = rs.getDate(1); // if(date == null) break; // maxDate = new DateTime(date); // } if(maxDate == null) { maxDate = minDate; } while(maxDate.isBefore(biggestDate.minusDays(2))) { String sql = "insert into dates (dates) values (?)"; PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setDate(1, new Date(maxDate.getMillis())); pstmt.executeUpdate(); maxDate = maxDate.plusDays(1); } } catch(SQLException e) { log.error("can't insert because ",e); } } }); } finally { if (session != null) { session.close(); } } } }