如何在预处理语句java中插入Big Integer

时间:2016-11-02 09:15:44

标签: java postgresql jdbc prepared-statement

我想使用预处理语句插入一个大整数值,我有一个名为xid的字符串变量(41527820021925053)

    preparedStatement = conn.prepareStatement(sql);
    preparedStatement.setObject(1,XOBJ);
    preparedStatement.setObject(2,YOBJ);
    preparedStatement.setBigInteger(3, xid);
    preparedStatement.setInt(4, 23);
    preparedStatement.executeUpdate();
    preparedStatement.close();

我是新手,如何实现这一目标。

3 个答案:

答案 0 :(得分:14)

PreparedStatement没有setBigInteger()方法。

使用以下方法之一:

<强>更新

使用以下comment made by OP,上面的第二个选项(现在突出显示)是正确的选项,因为PostgreSQL bigint与Java long相同。

  我正在使用postgres&amp;它有bigint [“UniqueIdGenerator”()]数据类型,这是一个17位大整数。

答案 1 :(得分:1)

如果您在谈论字符串中的整数或长整数值,那么您应该能够使用setString(idx, yourValue)setObject(idx, yourValue)setObject(idx, yourValue, java.sql.Types.BIGINT)驱动程序将其转换为目标类型。

如果您正在讨论java.math.BigInteger,那么符合JDBC 4.1(或更高版本)的驱动程序应该允许您将BigInteger值设置为BIGINTCHARVARCHARLONGVARCHAR列使用setObject(idx, yourBigInteger),或setObject(idx, yourBigInteger, targetType)其中targetTypejava.sql.Types.BIGINTjava.sql.Types.VARCHAR

但是,请注意并非所有驱动程序都实现此支持。

请参阅JDBC 4.1 specification第3.1节更改概述,表B-4 从Java对象类型到JDBC类型的映射,表B-5 转换由setObjectsetNull在Java对象类型和目标JDBC类型之间执行。或者,JDBC 4.2 specification,但只有表B-4和B-5。

答案 2 :(得分:0)

你可以尝试

    preparedStatement = conn.prepareStatement(sql);
    preparedStatement.setObject(1,XOBJ);
    preparedStatement.setObject(2,YOBJ);
    preparedStatement.setBigDecimal(3, BigDecimal.valueOf(Long.parseLong(xid))); //or you can try below
    preparedStatement.setBigDecimal(3, new BigDecimal(xid)); //both are correct
    preparedStatement.setInt(4, 23);
    preparedStatement.executeUpdate();
    preparedStatement.close();