如何将对象的 sql 时间转换为 java 时间?
How can I convert sql time to java time for an object?
当我运行这段代码时,它是这样说的:
Error:(43, 31) java: incompatible types: java.sql.Time cannot be
converted to 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();
}
导致此错误的原因是什么?
TrackTime
class 的构造函数必须期待 class LocalTime
的对象,其中 rs.getTime("startTime")
returns java.sql.Time
而不是 LocalTime
,因为两者不一样,所以你会得到错误。
您可以在 Time
对象上使用 toLocalTime()
方法,其中 returns 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"));
}
正如其他人已经说过的,这一定是因为您 TrackTime
构造函数需要 LocalTime
类型的参数,而 rs.getTime
returns 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 兼容,请考虑升级。
当我运行这段代码时,它是这样说的:
Error:(43, 31) java: incompatible types: java.sql.Time cannot be converted to 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();
}
导致此错误的原因是什么?
TrackTime
class 的构造函数必须期待 class LocalTime
的对象,其中 rs.getTime("startTime")
returns java.sql.Time
而不是 LocalTime
,因为两者不一样,所以你会得到错误。
您可以在 Time
对象上使用 toLocalTime()
方法,其中 returns 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"));
}
正如其他人已经说过的,这一定是因为您 TrackTime
构造函数需要 LocalTime
类型的参数,而 rs.getTime
returns 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 兼容,请考虑升级。