简体   繁体   English

executeQuery()返回空的ResultSet

[英]executeQuery() returns empty ResultSet

I'm creating a simple app which uses JDBC to get data from MySQL. 我正在创建一个简单的应用程序,该应用程序使用JDBC从MySQL获取数据。 I use a dao to get data from the database. 我使用dao从数据库中获取数据。 All but one are working fine (code is the same for all DAOs). 除了一个以外,其他所有模块都工作正常(所有DAO的代码均相同)。 Also I'm committing INSERT and UPDATE methods manually. 另外,我正在手动提交INSERT和UPDATE方法。

Workbench returns valid result even if I set isolation level read committed manually. 即使我将隔离级别设置为手动提交,工作台也会返回有效结果。

JDBCSessionDao create method: JDBCSessionDao创建方法:

public void create(Session session) throws SQLException{
        try(PreparedStatement ps = conn.prepareStatement(INSERT_SESSION)){
            conn.setAutoCommit(false);

            LocalTime start = session.getStartTime();
            LocalTime end = session.getEndTime();

            System.out.println(start + ", " + end);
            System.out.println(Time.valueOf(start) + ", " + Time.valueOf(end));

            ps.setTime(1, Time.valueOf(start));
            ps.setTime(2, Time.valueOf(end));
            ps.setDate(3, Date.valueOf(session.getDate()));
            ps.setLong(4, session.getMovieId());

            ps.executeUpdate();

            conn.commit();
            conn.setAutoCommit(true);
        }
        catch (SQLException e){
            logger.error(e.getMessage());
            conn.rollback();
        }
    }

JDBCSessionDao findByDate method JDBCSessionDao findByDate方法

public List<Session> findByDate(LocalDate date) {
    List<Session> sessions = new ArrayList<>();
    SessionMapper mapper = new SessionMapper();

    try(PreparedStatement ps = conn.prepareStatement(SELECT_BY_DATE_ORDER_BY_TIME_ASC)){
        ps.setDate(1, Date.valueOf(date));

        ResultSet rs = ps.executeQuery();

        System.out.println(rs.getFetchSize());

        while(rs.next()){
            Session s = mapper.extractFromResultSet(rs);
            sessions.add(s);
        }
    }
    catch (SQLException e){
        logger.error(e.getMessage());
    }

    return sessions;
}

Query: 查询:

String SELECT_BY_DATE_ORDER_BY_TIME_ASC = "SELECT * FROM sessions WHERE session_date=? ORDER by start_time ASC";

JDBCDaoFactory getConnection() method: JDBCDaoFactory getConnection()方法:

private Connection getConnection(){
    String url = "jdbc:mysql://localhost:3306/cinemajee?useLegacyDatetimeCode=false&serverTimezone=Europe/Kiev";
    String user = "root";
    String password = "root";

    try{
        Class.forName("com.mysql.cj.jdbc.Driver");
        return DriverManager.getConnection(url, user, password);
    }
    catch (SQLException | ClassNotFoundException e){
        e.printStackTrace();
        throw new RuntimeException();
    }
}

Query result in workbench: query result 工作台中的查询结果查询结果

Try modifying the query in your code. 尝试在您的代码中修改查询。 Perhaps the session_date parameter isn't working. 可能session_date参数不起作用。 So change from this: 因此,从此更改:

"SELECT * FROM sessions WHERE session_date=? ORDER by start_time ASC"'

to this: 对此:

"SELECT * FROM sessions ORDER by start_time ASC LIMIT 5"'

我忘记了在SessionMapper中更改列名,它们是以驼峰式(例如sessionId)编写的,但是我的数据库列是在蛇形(例如session_id)中编写的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM