Следующий метод пытается получить данные для строки с java.sql.Time < currentTime
. Несмотря на то, что таблица имеет ввод time
less than current time
, запрос не возвращает никакого результата, и программа никогда не входит во внутренний цикл while.
Почему это? Где я иду не так?
private void find() {
Session session = new HVR().getSession();
while(isThreadRunning) {
String hql = "from Scheduled where stime <'" + new java.sql.Time(new GregorianCalendar().getTimeInMillis()) + "'";
List list = session.createQuery(hql).list();
Iterator iterator = list.iterator();
System.out.println("Inside outer while loop");
while(iterator.hasNext()) {
System.out.println("Inside inner while loop");
Scheduled scheduled = (Scheduled)iterator.next();
String tweet = scheduled.getTweet();
int id = scheduled.getId();
tweetThread(tweet, id); // Tweet on a separate thread
}
}
}
Я никогда не пробовал, но вы должны иметь возможность выразить это в HQL, естественно, используя выражение HQL current_time():
String hql = "from Scheduled where stime < current_time()";
List list = session.createQuery(hql).list();
Если вы хотите изменить объект времени (арифметика даты сложна выше приведенной выше):
String hql = "from Scheduled where stime < :prevHour";
List list = session.createQuery(hql)
.setTime("prevHour", new Date(new Date().getTime() - 3600 * 1000))
.list();
Метод toString()
в java.sql.Time
даст вам только время дня (что-то вроде "12:05:59") без лет, месяцев и дней. Попробуйте использовать SimpleDateFormat:
//...
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String hql = "from Scheduled where stime <'" +
dateFormat.format(new java.sql.Time(
new GregorianCalendar().getTimeInMillis())) + "'";
//...
java.sql.Date
но Time
Ваш hql должен использовать привязку параметров, поэтому вместо
String hql = "from Scheduled where stime <'" + new java.sql.Time(new GregorianCalendar().getTimeInMillis()) + "'";
Используйте что-то в соответствии с:
String hql = "from Scheduled where stime < :nowDate";
List list = session.createQuery(hql)
.setDate("nowDate",new Date())
.list();
Если вы смотрите строго по времени, вы бы привязывали.setTimestamp().
Time