在插入之前,有什么方法可以将负数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会抱怨。您能建议我任何解决方案来解决这个问题吗?可能有什么方法可以将此负长整数转换为其他类型的对象? 预先谢谢你。
答案 0 :(得分:2)
从Java 8开始,您可以使用Long.toUnsignedString(values)
:
preparedStatement.setObject(columnNumber, Long.toUnsignedString( -3108819769473315784));
答案 1 :(得分:0)
在将值发送到ClickHouse之前,您应该先对其进行处理。
就是说,当在UInt
类型的列中插入负值时,您需要将其手动转换为正值/想要将其转换为该目标类型范围内的ClickHouse。
例如,同样适用。发送到不可为空的列类型时处理null
。