我正在开发一个小程序,在一个编号列表中列出本地火车站,然后要求用户键入他们希望看到下一个到达时间的车站编号。
我的问题是我认为MySQL查询在检索到达时间方面不正确。列表返回空。之前使用jdbc,此查询工作正常:
"SELECT arrival_time FROM stop_times WHERE stop_id = '"
+ myStation.getID()
+ "' AND arrival_time > time('now', 'localtime') ORDER BY arrival_time asc;";
和当前Hibernate查询:
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: Index: 0, size: 0 atjava.util.ArrayList.rangeCheck(ArrayList.java:653)atjava.util.ArrayList.get(ArrayList.java:429)atcom.moeller.code.Stops.getNextArance(Stops.java:73)
第73行String arrivalTime=arrivals1.get(用户输入);'
数据库存储在本地。
您对列表使用了错误的方法。
当你使用列表时。get(param)param应该是您要查找的位置,而不是用户输入。
您需要循环列表,并将列表的每个位置与用户输入进行比较。
顺致敬意,
这有几个问题。
首先,查询不使用参数,这意味着您可能会在危险的地方犯这个错误。您必须传递这样的变量:
String sql = "SELECT arrival_time FROM stop_times WHERE stop_id = ?"
+ " AND arrival_time > time('now', 'localtime') ORDER BY arrival_time asc;";
Query query = sessionFactoryBean.getCurrentSession()
.createSQLQuery(sql)
.addEntity(Station.class);
query.setParameter(1, myStation.getID());
看到问号了吗?这是一个位置参数。也可以使用命名参数。
String sql = "SELECT thing FROM table WHERE column1 LIKE :ptrn";
...
query.setParameter("ptrn", "%that%");
请注意,在查询中,参数如何以:
开头,但在调用setParameter
时并非如此。
这种安全插入参数的方法称为使用“准备好的语句”或“参数化查询”。快速查找有关它们的教程,它们非常重要。
其次,在getNextArrival中,您忘记检查列表是否有那么多元素。
if (arrivals1.size() <= user_input) {
return null;
}
当然,当它向使用它的函数返回null时,您必须小心。
我想检索Order对象的列表。每个Order对象可能都有一个OrderRows列表。OrderRows保存在单独的表中。如何将下面的查询与Jdbctemplate一起使用?
MongoDB提供了lookup操作,用于实现两个表的关联聚合,但聚合操作编写起来比较麻烦,而且不符合面向对象的思维。为简化开发,bugu-mongo提供了一个JoinQuery类,用于实现两个表的连接查询。 JoinQuery借鉴了SQL左连接的概念: 当前表为左表,被连接的表为右表; 通过指定左键、右键进行关联; 对于不存在关联的数据,只会返回左表的数据,右表的数据为null。 创建JoinQ
我有一个问题——我有一个带有websocket的java spring web应用程序,在本教程之后是sockjs实现https://spring.io/guides/gs/messaging-stomp-websocket/我需要用NodeJS连接到这个服务器应用程序。服务器应用程序是正常的,因为我设法通过web应用程序连接,它正在工作,但问题来了,当我试图实现它的nodejs。因此,要明确这一
主要内容:1.内连接,2. 左连接 - LEFT JOIN,3. 右连接 - RIGHT JOIN,4. 全连接 - FULL JOIN顾名思义,连接(JOIN)表示要结合一些东西。 在SQL的情况下,连接(JOIN)表示“组合两个或更多表”。 在SQL中,子句用于组合数据库中两个或多个表的记录。 SQL JOIN的类型 内连接 - INNER JOIN 左连接 - LEFT JOIN 右连接 - RIGHT JOIN 全连接 - FULL JOIN 假设有以下几张表,EMPLOYEE 表的结构
我有2个具有多对多关系的实体User和AcCountBase。我需要从连接表中选择所有具有选定用户ID的AcCountBase对象。我尝试了一些连接查询,但不起作用。
我得到以下exeption连接到Mssql服务器。 我在属性中使用相同的配置连接到JDBC,但在尝试连接到R2DBC时出现问题。在Rest时发生,而不是在启动应用程序时发生。