jdbc—从java中的结果集(oracle db)获取bigint值

wr98u20j  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(572)

我想从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\u mob列包含大整数值。

djmepvbi

djmepvbi1#

这个 BIGINT 数据类型是一个8字节的二进制数,这意味着匹配的java类型是 long ,所以使用 getLong() :

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

如果列是 NULL -可以,使用java类型 Long ,然后打电话 wasNull() 打电话后 getLong() :

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

或者,如果您想要一个java BigInteger ,呼叫 getBigDecimal() 并将其转换为:

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

dhxwm5r42#

正确的方法是 .getObject(colIdx, BigInteger.class); ,但这是否真正起作用取决于您的jdbc驱动程序。可能不会,但你应该试试看:如果成功了,就这样。简单,高效,没有问题。
如果没有,你应该用 .getBigDecimal() . 这是jdbc驱动程序实际上可能不支持的另一种方式,所以请尝试一下。
如果这也是一个失败,你最后的选择是 .getString ,然后将其传递给biginteger以重新分析为数字。这是相当低效的。sql中列/表达式的类型是什么?知道会有帮助的,那是一个搜索文档的好地方。

mrwjdhj3

mrwjdhj33#

使用 BigInteger.valueOf(rs.getLong("emp_mob")) 这样更安全。

相关问题