当我运行这段代码时,它会说:
错误:(43,31)java:不兼容的类型:java.sql.Time不能为 转换为java.time.LocalTime
public TrackTime read(int id){
rs = jdbc.queryForRowSet("SELECT * FROM tracktime where id ='" + id + "'");
while (rs.next()){
return new TrackTime (rs.getInt("id"),
rs.getDate("date"),
rs.getTime("startTime"),
rs.getTime("endTime"),
rs.getString("licenseType"),
rs.getInt("trackNumber"));
}
return new TrackTime();
}
什么是导致此错误的原因?
答案 0 :(得分:1)
正如其他人已经说过的,这一定是因为您TrackTime
的构造函数期望类型为LocalTime
的参数,而rs.getTime
返回的是java.sql.Time
。
假设JDBC 4.2(或更高版本;您可能有),请使用getObject
从结果集中检索java.time类,例如LocalTime
和LocalDate
:
return new TrackTime (rs.getInt("id"),
rs.getObject("date", LocalDate.class),
rs.getObject("startTime", LocalTime.class),
rs.getObject("endTime", LocalTime.class),
rs.getString("licenseType"),
rs.getInt("trackNumber"));
我也可以自由更改日期的检索,这可能会给您带来新的编译时错误。但是,既然您已经在使用java.time,则最好更改TrackTime
构造函数以接受LocalDate
?
如果您的JDBC驱动程序尚未兼容JDBC 4.2,请考虑升级。
答案 1 :(得分:0)
您的TrackTime
类的构造函数必须期待类LocalTime
的对象,其中rs.getTime("startTime")
返回java.sql.Time
而不是LocalTime
,因此两者都不相同您得到错误。
您可以在toLocalTime()
对象上使用Time
方法,该方法返回LocalTime
对象,这样正确的对象类型将传递给构造函数,并且可以避免错误。
因此,在您的代码中,您需要这样做,
while (rs.next()){
return new TrackTime (rs.getInt("id"),
rs.getDate("date"),
rs.getTime("startTime").toLocalTime(),
rs.getTime("endTime").toLocalTime(),
rs.getString("licenseType"),
rs.getInt("trackNumber"));
}