【发布时间】:2018-01-24 18:55:41
【问题描述】:
我正在开发一个小程序,该程序在编号列表中列出当地火车站,然后要求用户输入他们希望查看下一次到达时间的车站号码。
我的问题是我不认为 MySQL 查询是正确的检索到达时间。该列表返回空。以前使用 jdbc,此查询运行良好:
"SELECT arrival_time FROM stop_times WHERE stop_id = '"
+ myStation.getID()
+ "' AND arrival_time > time('now', 'localtime') ORDER BY arrival_time asc;";
以及当前的休眠查询:
public List<String> getArrivals() {
sessionFactoryBean.getCurrentSession().beginTransaction();
String sql = "SELECT arrival_time FROM stop_times WHERE stop_id = '"
+ myStation.getID()
+ "' AND arrival_time > time('now', 'localtime') ORDER BY arrival_time asc;";
Query query = sessionFactoryBean.getCurrentSession()
.createSQLQuery(sql)
.addEntity(Station.class);
List<String> arrivals = query.list();
sessionFactoryBean.getCurrentSession().getTransaction().commit();
return arrivals;
}
从这个方法调用,我在哪里得到 IndexOutOfBoundsException:
public String getNextArrival(int user_input) {
getStationName(user_input);
List<String> arrivals1 = arrival.getArrivals();
System.out.println(arrivals1);
System.out.println(arrivals1.size());
String arrivalTime = arrivals1.get(user_input);
return convertTime(arrivalTime);
}
线程“main”中的异常java.lang.IndexOutOfBoundsException:索引:0, 尺寸:0 在 java.util.ArrayList.rangeCheck(ArrayList.java:653) 在 java.util.ArrayList.get(ArrayList.java:429) 在 com.moeller.code.Stops.getNextArrival(Stops.java:73)
第73行字符串到达时间=到达1.get(user_input);'
数据库存储在本地。
【问题讨论】:
-
你在mysql中执行了sql吗?
-
你真的,真的需要学习和使用准备好的语句(或参数化的 JPQL 查询):docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html。
-
还有
stop_times的表结构是什么? -
我在 sqlite 中执行了它,它确实有效。不知道hibernate是不是因为某种原因不喜欢,第一次用。