[B cannot be cast to java.lang.String
同样的数据 使用restful连接正常,使用websocket报错
Caused by: java.lang.ClassCastException: [B cannot be cast to java.lang.String at com.taosdata.jdbc.common.SerializeBlock.getColumnSize(SerializeBlock.java:459) ~[taos-jdbcdriver-3.6.3.jar:na] at com.taosdata.jdbc.common.SerializeBlock.getTagTotalLength(SerializeBlock.java:408) ~[taos-jdbcdriver-3.6.3.jar:na] at com.taosdata.jdbc.common.SerializeBlock.getStmt2BindBlock(SerializeBlock.java:497) ~[taos-jdbcdriver-3.6.3.jar:na] at com.taosdata.jdbc.ws.AbsWSPreparedStatement.executeBatchImpl(AbsWSPreparedStatement.java:1091) ~[taos-jdbcdriver-3.6.3.jar:na] at com.taosdata.jdbc.ws.AbsWSPreparedStatement.executeUpdate(AbsWSPreparedStatement.java:193) ~[taos-jdbcdriver-3.6.3.jar:na] at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3253) ~[druid-1.2.5.jar:1.2.5] at com.alibaba.druid.filter.FilterAdapter.preparedStatement_executeUpdate(FilterAdapter.java:1092) ~[druid-1.2.5.jar:1.2.5] at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeUpdate(FilterEventAdapter.java:491) ~[druid-1.2.5.jar:1.2.5] at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeUpdate(FilterChainImpl.java:3251) ~[druid-1.2.5.jar:1.2.5] at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.executeUpdate(PreparedStatementProxyImpl.java:194) ~[druid-1.2.5.jar:1.2.5] at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeUpdate(DruidPooledPreparedStatement.java:255) ~[druid-1.2.5.jar:1.2.5] ... 24 common frames omitted
报错位置:tag数据类型转换异常
采用 INSERT INTO (...)values (.....) 加 pstmt.addBatch(); pstmt.executeBatch(); 的形式写入,
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId>
<version>3.6.3</version>
</dependency>
最新版本发现了这个问题,使用com.taosdata.jdbc.ws.WebSocketDriver驱动,插入的数据中有NCHAR类型的数据,计算就会出错 druid+taos ,使用webSocket方式连接数据库。 com.alibaba.druid.filter.FilterChainImpl#preparedStatement_setString com.taosdata.jdbc.ws.AbsWSPreparedStatement#setString(int, java.lang.String) com.taosdata.jdbc.ws.AbsWSPreparedStatement#executeUpdate com.taosdata.jdbc.common.SerializeBlock#getColumnSize NCHAR字段对应的字符串数据,最终会调用到getColumnSize方法,然后导致报错
@yu285 能否帮忙瞧瞧这种情况怎么处理,还是说ws目前支持度不是那么好。官方文档说RS性能不是那么好,决定使用ws,但是这一使用就踩坑了。NCHAR类型的数据,数据类型都不匹配,强制转换报错。
@yu285能否帮忙看看这种情况怎么处理,还是说ws目前支持度不是那么好。官方文档说RS性能不是那么好,决定使用ws,但是这个使用就踩坑了。NCHAR类型的数据,数据类型不一致,强制转换报错。
目前我也正在尝试集成TD,在我的WS协议集成过程中我发现了TD的NCHAR字段列的数据应该在java中使用setNString的方式赋值,使用setString方式会报错:string to byte error类型错误。
收到,我们看下
对于 NCHAR 类型,jdbc 标准是用 setNString 来设置。
后续版本会考虑也兼容 setString,但是这不是规范。请尽量用 setNString
@JavaScar @xqj-0511 @sdzc
收到,我们看下
@yu285 @sheyanjie-qq 另外在目前我的测试环境中,TD镜像版本为:3.3.6.9。通过执行测试查询后发现:
SELECT * FROM "tableName"
WHERE ts < '2025-06-22 17:00:00.000' ORDER BY ts desc
SELECT * FROM "tableName"
WHERE
ts BETWEEN '2025-06-22 9:00:00.000' AND '2025-06-22 17:00:00.000'
ORDER BY ts desc
查询返回的数据集的时间返回集为错误返回的时间集数据。 2025-06-22 18:11:29.685 2025-06-22 18:11:29.684 2025-06-22 18:11:29.683 2025-06-22 18:11:29.682 2025-06-22 18:11:29.681 正常数据集应该为指定时间点的数据集。
收到,我们看下
@yu285 @sheyanjie-qq 另外在目前我的测试环境中,TD镜像版本为:3.3.6.9。通过执行测试查询后发现:
SELECT * FROM "tableName" WHERE ts < '2025-06-22 17:00:00.000' ORDER BY ts descSELECT * FROM "tableName" WHERE ts BETWEEN '2025-06-22 9:00:00.000' AND '2025-06-22 17:00:00.000' ORDER BY ts desc查询返回的数据集的时间返回集为错误返回的时间集数据。 2025-06-22 18:11:29.685 2025-06-22 18:11:29.684 2025-06-22 18:11:29.683 2025-06-22 18:11:29.682 2025-06-22 18:11:29.681 正常数据集应该为指定时间点的数据集。
收到,我们看下
@yu285 @sheyanjie-qq 另外在目前我的测试环境中,TD镜像版本为:3.3.6.9。通过执行测试查询后发现:
SELECT * FROM "tableName" WHERE ts < '2025-06-22 17:00:00.000' ORDER BY ts descSELECT * FROM "tableName" WHERE ts BETWEEN '2025-06-22 9:00:00.000' AND '2025-06-22 17:00:00.000' ORDER BY ts desc查询返回的数据集的时间返回集为错误返回的时间集数据。 2025-06-22 18:11:29.685 2025-06-22 18:11:29.684 2025-06-22 18:11:29.683 2025-06-22 18:11:29.682 2025-06-22 18:11:29.681 正常数据集应该为指定时间点的数据集。
在我使用的TD镜像版本中还存在一个奇怪现象,ts的时间范围区间设置成大于或等于八个时间时,有错误的时间点数据集返回。 当ts的指定时间范围小于八个小时时,返回为空。例如:'2025-06-22 9:00:00.000' AND '2025-06-22 17:00:00.000':返回的数据集ts起点为当前最新数据;而'2025-06-22 15:00:00.000' AND '2025-06-22 17:00:00.000'进行指定时间(当前为指定15点-17点时间)范围时,查询结果数据集为空。