[英]IllegalFormatConversionException d != java.lang.Integer when trying to printf date?
[英]Unsupported conversion from DATE to java.lang.Integer
因此,我使用 Java Ebean 庫生成了以下 model:
package models;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import java.time.LocalDateTime;
@Entity
@Table(name = "Zeit")
public class Zeit extends BaseModel {
@Column
private LocalDateTime start;
@Column
private LocalDateTime ende;
@Column
private int pause;
@ManyToOne(optional = false)
private Benutzer benutzer;
@Column
private LocalDateTime pauseStart;
public Zeit() {
}
public Zeit(LocalDateTime start, LocalDateTime ende, int pause, LocalDateTime pauseStart) {
this.start = start;
this.ende = ende;
this.pause = pause;
this.pauseStart = pauseStart;
}
public LocalDateTime getStart() {
return start;
}
public void setStart(LocalDateTime start) {
this.start = start;
}
public LocalDateTime getEnde() {
return ende;
}
public void setEnde(LocalDateTime ende) {
this.ende = ende;
}
public int getPause() {
return pause;
}
public void setPause(int pause) {
this.pause = pause;
}
public Benutzer getBenutzer() {
return benutzer;
}
public void setBenutzer(Benutzer benutzer) {
this.benutzer = benutzer;
}
public LocalDateTime getPauseStart() {
return pauseStart;
}
public void setPauseStart(LocalDateTime pauseStart) {
this.pauseStart = pauseStart;
}
}
這導致這些 SQL 語句:
create table zeit (
id bigint auto_increment not null,
start datetime(6),
ende datetime(6),
pause integer not null,
version bigint not null,
when_created datetime(6) not null,
when_modified datetime(6) not null,
constraint pk_zeit primary key (id)
);
這個想法是我想將打開和關閉時間寫到數據庫中。 這基本上可以通過使用
private void btn_anmeldenActionPerformed(java.awt.event.ActionEvent evt) {
try {
Zeit z = new Zeit();
z.setStart(LocalDateTime.now());
z.setBenutzer(benutzer);
z.save();
btn_anmelden.setText(String.valueOf(z.getStart()));
btn_anmelden.setEnabled(false);
} catch (Exception e) {
}
}
但是當使用以下方法從數據庫中取回實體時:
private void initState() {
Zeit lastTime = new QZeit().findList().get(0);
System.out.println(lastTime);
}
我得到錯誤:
com.mysql.cj.exceptions.DataConversionException: Unsupported conversion from TIMESTAMP to java.lang.Integer
到目前為止,我試圖
java.util.Date
, java.sql.Date
,...)我也在使用
mysql-connector-java
:8.0.19io.ebean
:12.1.8 MySQL 中的DATETIME
數據類型表示日期和時間,但缺少任何時區或偏移量的概念。 所以這種類型不能代表一個時刻,不是時間軸上的一個點。
與此類型等效的標准 SQL 是TIMESTAMP WITHOUT TIME ZONE
。 Java 中的等效項是LocalDateTime
。
要在標准 SQL 中記錄時刻,請使用TIMESTAMP WITH TIME ZONE
。 在 MySQL 中, TIMESTAMP
。 在 Java、 Instant
、 OffsetDateTime
和ZonedDateTime
中,JDBC 4.2 及更高版本需要對OffsetDateTime
的支持,而對其他兩個的支持是可選的。
OffsetDateTime odt = OffsetDateTime.now() ;
myPreparedStatement.setObject( … , odt ) ; // Writing to a column of MySQL type `TIMESTAMP`, standard SQL `TIMESTAMP WIH TIME ZONE`.
恢復。
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
至於 ebean 錯誤,您沒有提供足夠的詳細信息。 我們需要查看它試圖實例化的 Java class。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.