首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >executeQuery()返回空ResultSet

executeQuery()返回空ResultSet
EN

Stack Overflow用户
提问于 2019-08-01 19:07:08
回答 2查看 349关注 0票数 0

我正在创建一个简单的应用程序,它使用JDBC从MySQL获取数据。我使用dao从数据库中获取数据。除了一个之外,所有的代码都很好(所有DAO的代码都是相同的)。另外,我正在手动提交插入和更新方法。

即使我手动设置隔离级别read提交,工作台也会返回有效的结果。

JDBCSessionDao创建方法:

代码语言:javascript
复制
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方法

代码语言:javascript
复制
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;
}

查询:

代码语言:javascript
复制
String SELECT_BY_DATE_ORDER_BY_TIME_ASC = "SELECT * FROM sessions WHERE session_date=? ORDER by start_time ASC";

JDBCDaoFactory getConnection()方法:

代码语言:javascript
复制
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();
    }
}

工作台中的查询结果:查询结果

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-02 10:31:44

我忘了在SessionMapper中更改列名,它们是用camel (例如sessionId)编写的,而我的db列是用蛇形(例如session_id)写的。

票数 0
EN

Stack Overflow用户

发布于 2019-08-01 21:16:11

尝试修改代码中的查询。也许session_date参数不起作用。因此,改变这一点:

代码语言:javascript
复制
"SELECT * FROM sessions WHERE session_date=? ORDER by start_time ASC"'

对此:

代码语言:javascript
复制
"SELECT * FROM sessions ORDER by start_time ASC LIMIT 5"'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57315580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档