在准备好的语句中将否定的Java long转换为Clickhouse Uint64

问题描述 投票:0回答:2

在插入之前,有什么方法可以将负数long转换为Uint64(clickhouse数据类型)。暂时

preparedStatement.setObject(columnNumber, -3108819769473315784);
preparedStatement.execute();

引发异常后抛出

ru.yandex.clickhouse.except.ClickHouseException: ClickHouse exception, code: 321, host:
localhost, port: 33493; Code: 321, e.displayText() = DB::Exception: Expression returns value
NULL, that is out of range of type UInt64, at: -3108819769473315784

我理解为什么Clickhouse会抱怨。您能建议我任何解决方案来解决这个问题吗?可能有什么方法可以将此负长整数转换为其他类型的对象?预先谢谢你。

java jdbc clickhouse
2个回答
1
投票

从Java 8开始,您可以使用Long.toUnsignedString(values)

Long.toUnsignedString(values)

0
投票

您应先将这些值发送到ClickHouse。就是说,当在preparedStatement.setObject(columnNumber, Long.toUnsignedString( -3108819769473315784)); 类型的列中插入负值时,您需要将其手动转换为正值/想要将其表示为该目标类型范围内的ClickHouse。

同样适用于发送到不可为空的列类型时处理UInt

© www.soinside.com 2019 - 2024. All rights reserved.