【问题标题】:Get a BigInt value from a resultset (oracle db) in java从 java 中的结果集(oracle db)获取 BigInt 值
【发布时间】:2021-03-26 15:53:29
【问题描述】:

我想从 jdbc 中的 oracle 数据库中获取 BigInt 值。 getBigInt()getBigInteger() 不像 getInt() 那样工作。这是代码sn-p:

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 列包含大整数值。

【问题讨论】:

  • 当前异常是什么?不是你的问题,但你应该在finally 块中关闭ConnectionStatementResultSet(或使用try-with-resources)。
  • 或许可以试试getLonggetBigDecimal

标签: java jdbc oracle11g


【解决方案1】:

BIGINT数据类型是一个8字节二进制数,也就是说匹配的Java类型是一个long,所以使用getLong()

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

如果列是NULL-able,使用Java类型Long,在调用getLong()后调用wasNull()

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());

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • '更安全'?对于太大的数字,这可能最终会默默地返回垃圾。如果有人问起 BigInteger,你会认为他们有一个大整数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2018-10-30
      • 1970-01-01
      相关资源
      最近更新 更多