小编Rod*_*djf的帖子

Kafka:ClassCastException:类 org.apache.avro.generic.GenericData$Record 无法转换为类

当尝试将 record.value() 转换为 java 对象时,我在消费者中遇到了这个异常:

ClassCastException: class org.apache.avro.generic.GenericData$Record cannot be cast  to class [...].PublicActivityRecord (org.apache.avro.generic.GenericData$Record and [...].PublicActivityRecord are in unnamed module of loader 'app')
Run Code Online (Sandbox Code Playgroud)

生产者发送 java 对象,它是一个名为 的用户定义类型,如下所示PublicActivityRecord

ClassCastException: class org.apache.avro.generic.GenericData$Record cannot be cast  to class [...].PublicActivityRecord (org.apache.avro.generic.GenericData$Record and [...].PublicActivityRecord are in unnamed module of loader 'app')
Run Code Online (Sandbox Code Playgroud)

此时我可以在调试模式下看到 的值ProducerRecord确实是类型PublicActivityRecord

在注册表服务器上,我可以在日志中看到发送模式的生产者的 POST 请求:

Registering new schema: subject DEV-INF_9325_activityRecord_01-value, version null, id null, type null, schema size 7294 (io.confluent.kafka.schemaregistry.rest.resources.SubjectVersionsResource:262)
[2022-01-28 07:01:35,575] INFO 192.168.36.30 - - [28/janv./2022:06:01:34 …
Run Code Online (Sandbox Code Playgroud)

java classcastexception avro apache-kafka confluent-schema-registry

10
推荐指数
1
解决办法
1万
查看次数

Java 8中的java.sql.Date与Java 6相比

我知道java.sql.Date 应该将小时,分钟,秒和毫秒设置为零,以符合标准SQL日期的定义.这在此处记录(Java 8中也是如此).

我也知道Oracle DATE类型 确实具有 YEAR,MONTH,DAY,HOUR,MINUTE和SECOND这些时间字段.但没有分数秒和时区.

我注意到Java 6和Java 8中的相同查询行为不一样:

private static final String REQUETE_LISTE_CALENDRIER_DATE = 
    " SELECT ID_DATE, JOUR" +
    " FROM CALENDRIER " +
    " WHERE ID_DATE = ? ";
Run Code Online (Sandbox Code Playgroud)

绑定到PreparedStatement像这样定义的java.sql.Date"dateCourante"(它将值设置为那些时间字段):

GregorianCalendar gregorianCalendar = new GregorianCalendar(); // "now"
java.sql.Date dateCourante = new java.sql.Date(gregorianCalendar.getTime().getTime()); // date AND time of "now"
Run Code Online (Sandbox Code Playgroud)
  • 使用Java 6,我找到了一个值,
  • 使用Java 8,我没有.

在我的数据库中,日期的小时,分​​钟,秒为零.我们可以查看以下查询:

select to_char(id_date, 'DD/MM/YYYY HH24:MI:SS')
from calendrier
where id_date = to_date('26/08/2016', 'DD/MM/YYYY');
Run Code Online (Sandbox Code Playgroud)

这给了:

2016/08/26 00:00:00

所以,我的理解是:

java sql oracle date java-8

5
推荐指数
1
解决办法
1137
查看次数