我想使用预处理语句插入一个大整数值,我有一个名为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();
我是新手,如何实现这一目标。
答案 0 :(得分:14)
PreparedStatement
没有setBigInteger()
方法。
使用以下方法之一:
setBigDecimal(3, new BigDecimal(xid))
setLong(3, Long.parseLong(xid))
如果值适合long
setString(3, xid)
让JDBC驱动程序为您转换字符串<强>更新强>
使用以下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
值设置为BIGINT
,CHAR
,VARCHAR
或LONGVARCHAR
列使用setObject(idx, yourBigInteger)
,或setObject(idx, yourBigInteger, targetType)
其中targetType
为java.sql.Types.BIGINT
或java.sql.Types.VARCHAR
。
但是,请注意并非所有驱动程序都实现此支持。
请参阅JDBC 4.1 specification第3.1节更改概述,表B-4 从Java对象类型到JDBC类型的映射,表B-5 转换由setObject
和setNull
在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();