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

时间:2019-10-04 12:08:23

标签: java jdbc clickhouse

在插入之前,有什么方法可以将负数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会抱怨。您能建议我任何解决方案来解决这个问题吗?可能有什么方法可以将此负长整数转换为其他类型的对象? 预先谢谢你。

2 个答案:

答案 0 :(得分:2)

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

preparedStatement.setObject(columnNumber, Long.toUnsignedString( -3108819769473315784));

答案 1 :(得分:0)

在将值发送到ClickHouse之前,您应该先对其进行处理。
就是说,当在UInt类型的列中插入负值时,您需要将其手动转换为正值/想要将其转换为该目标类型范围内的ClickHouse。

例如,同样适用。发送到不可为空的列类型时处理null