从Java中的结果集(Oracle数据库)中获取BigInt值



我想使用JDBC从Oracle数据库获取BIGINT
getBigInt()getBigInteger()的工作方式与getInt()不同。

以下是代码片段:

public List<Employee> getAllEmployees()
{
List<Employee> employeeList = new ArrayList<Employee>();
try
{
//typical jdbc coding
Connection conn = DBUtil.getConnection();
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM employee1");
while(rs.next())
{
Employee employee = new Employee(rs.getString("emp_id"), rs.getString("name"), rs.getBigInt("emp_mob"));
employeeList.add(employee);
}
DBUtil.closeConnection(conn);  //close connection
}
catch(Exception e)
{
e.printStackTrace();
}

return employeeList;
}
表中的

emp_mob列包含大整数值

BIGINT数据类型是8字节二进制数,这意味着匹配的Java类型是long,因此使用getLong():

long mob = rs.getLong("emp_mob");

如果列是可NULL的,请使用Java类型Long,并在调用getLong():之后调用wasNull()

Long mob = rs.getLong("emp_mob");
if (rs.wasNull())
mob = null;

或者,如果您想要JavaBigInteger,请调用getBigDecimal()并将其转换为:

BigDecimal decimal = rs.getBigDecimal("emp_mob");
BigInteger mob = (decimal == null ? null : decimal.toBigInteger());

正确的方法是.getObject(colIdx, BigInteger.class);,但这是否真的有效取决于JDBC驱动程序。它可能不会,但你应该试试:如果真的会,那你就去吧。简单,高效,没有问题。

如果没有,您可能应该使用.getBigDecimal()。这是JDBC驱动程序实际上可能不支持的另一种方式,所以请尝试一下。

如果这也是一个失败,那么最后一个真正的方法是.getString,然后将其传递给BigInteger以重新解析为一个数字。这是相当低效的。SQL中的列/表达式的类型是什么?知道会有帮助,这是一个搜索文档的好地方。

使用BigInteger.valueOf(rs.getLong("emp_mob"))而且这种方式更安全。

最新更新