我正在创建一个简单的应用程序,它使用JDBC从MySQL获取数据。我使用dao从数据库中获取数据。除了一个之外,所有的代码都很好(所有DAO的代码都是相同的)。另外,我正在手动提交插入和更新方法。
即使我手动设置隔离级别read提交,工作台也会返回有效的结果。
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方法
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;
}查询:
String SELECT_BY_DATE_ORDER_BY_TIME_ASC = "SELECT * FROM sessions WHERE session_date=? ORDER by start_time ASC";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();
}
}工作台中的查询结果:查询结果
发布于 2019-08-02 10:31:44
我忘了在SessionMapper中更改列名,它们是用camel (例如sessionId)编写的,而我的db列是用蛇形(例如session_id)写的。
发布于 2019-08-01 21:16:11
尝试修改代码中的查询。也许session_date参数不起作用。因此,改变这一点:
"SELECT * FROM sessions WHERE session_date=? ORDER by start_time ASC"'对此:
"SELECT * FROM sessions ORDER by start_time ASC LIMIT 5"'https://stackoverflow.com/questions/57315580
复制相似问题