从java中的resultset(oracle db)获取BigInt值

从java中的resultset(oracle db)获取BigInt值,java,jdbc,oracle11g,Java,Jdbc,Oracle11g,我想从jdbc中的oracle数据库中获取一个BigInt值getBigInt()或getbiginger()的工作方式与getInt()不同。以下是代码片段: public List<Employee> getAllEmployees() { List<Employee> employeeList = new ArrayList<Employee>(); try { //typical jdbc coding

我想从jdbc中的oracle数据库中获取一个BigInt值
getBigInt()
getbiginger()
的工作方式与
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;
}
public List getAllEmployees()
{
List employeeList=新建ArrayList();
尝试
{
//典型的jdbc编码
连接conn=DBUtil.getConnection();
语句st=conn.createStatement();
结果集rs=st.executeQuery(“从员工中选择*);
while(rs.next())
{
Employee Employee=新员工(rs.getString(“emp_id”)、rs.getString(“name”)、rs.getBigInt(“emp_mob”);
employeeList.add(员工);
}
DBUtil.closeConnection(conn);//关闭连接
}
捕获(例外e)
{
e、 printStackTrace();
}
返回员工名单;
}

表中的emp\u mob列包含大整数值。

使用
biginger.valueOf(rs.getLong(“emp\u mob”)

这种方法更安全。

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

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


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

数据类型是一个8字节的二进制数,这意味着匹配的Java类型是一个
长的
,因此请使用:

long mob=rs.getLong(“emp_mob”);
如果列为
NULL
-able,请使用Java类型
Long
,并在调用
getLong()
后调用:

Long mob=rs.getLong(“emp_mob”);
如果(rs.wasNull())
mob=null;
或者,如果您想要Java,请调用并转换它:

BigDecimal=rs.getBigDecimal(“emp_mob”);
biginger mob=(decimal==null?null:decimal.toBigInteger());

当前的例外情况是什么?不是针对您的问题,但您应该在
finally
块中关闭
连接
语句
结果集
(或使用
尝试使用资源
),或者尝试
getLong
getBigDecimal
更安全?对于太大的数字,这可能会以静默返回垃圾告终。您可能会认为,如果有人询问BigInteger,他们会得到一个大整数。如果值为
NULL
,则不起作用。