在插入之前,有什么方法可以将负数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 8开始,您可以使用Long.toUnsignedString(values)
:
Long.toUnsignedString(values)
您应先将这些值发送到ClickHouse。就是说,当在preparedStatement.setObject(columnNumber, Long.toUnsignedString( -3108819769473315784));
类型的列中插入负值时,您需要将其手动转换为正值/想要将其表示为该目标类型范围内的ClickHouse。
同样适用于发送到不可为空的列类型时处理UInt
。