当前位置: 首页 > 知识库问答 >
问题:

noob,java spring自动连接hibernate mysql查询,对吗?

黄君博
2023-03-14

我正在开发一个小程序,在一个编号列表中列出本地火车站,然后要求用户键入他们希望看到下一个到达时间的车站编号。

我的问题是我认为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(用户输入);'

数据库存储在本地。

共有2个答案

严承允
2023-03-14

您对列表使用了错误的方法。

当你使用列表时。get(param)param应该是您要查找的位置,而不是用户输入。

您需要循环列表,并将列表的每个位置与用户输入进行比较。

顺致敬意,

吕征
2023-03-14

这有几个问题。

首先,查询不使用参数,这意味着您可能会在危险的地方犯这个错误。您必须传递这样的变量:

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时发生,而不是在启动应用程序时发生。