我想使用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"))
而且这种方式更安全。