【问题标题】:NUMBER(10,2) in oracle database [closed]oracle数据库中的NUMBER(10,2)[关闭]
【发布时间】:2018-11-08 07:31:46
【问题描述】:

oracle 数据库内部变量数据类型为NUMBER(10,2)。所以我需要在我的 java 代码中获取这个值。我尝试了不同的方法:

  • Float
  • float
  • double
  • Double
  • BigDecimal

但是这些东西在java中没有映射。我需要做什么。 提前致谢。

【问题讨论】:

  • 请尝试 BigDecimal 设置比例。 BigDecimal db = new BigDecimal(d).setScale(10, BigDecimal.ROUND_HALF_UP);
  • @RaheelaAslam d 是什么
  • d 是来自数据库的实际值。
  • @RaheelaAslam 为什么当 Oracle 数据库中的数据类型的标度为 2 时,您要将标度设置为 10?你为什么还要设置它?从数据库读取时它已经是 2,并且在数据库中插入/更新时会为您四舍五入(如果需要)。
  • 对不起,我的错误实际上我们必须设置 2. BigDecimal db = new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP);

标签: java oracle type-conversion


【解决方案1】:

使用ResultSet.getBigDecimal(int)按索引获取

ResultSet.getBigDecimal(String) 按列名获取

JDBC Guide 也建议对任何数字类型使用此方法

JDBC 类型映射到 Java 类型

NUMERIC java.math.BigDecimal

【讨论】:

    【解决方案2】:

    您可以使用doubleBigDecimal

    例如,假设表ATEST 的列N 定义为CREATE TABLE ATEST ( N NUMBER(10,2) )

    import java.math.BigDecimal;
    import java.sql.DriverManager;
    
    import javax.swing.JOptionPane;
    
    public class OraNum {
        private static String url = "jdbc:oracle:thin:@localhost:1523:sid";
        private static String user = "User";
    
        public static void main(String[] args) throws Exception {
            var pwd = JOptionPane.showInputDialog("Password: ");
            if (pwd == null) {
                return;
            }
    
            try (
                    var conn = DriverManager.getConnection(url, user, pwd);
                    var stmt = conn.prepareStatement("select N from ATEST");
                    var rset = stmt.executeQuery();
                    ) {
                while (rset.next()) {
                    double d = rset.getDouble(1);
                    BigDecimal big = rset.getBigDecimal(1);
                    System.out.printf("double: %s,  BigDecimal: %s%n", d, big);
                }
            }
        }
    }
    

    您也可以使用rset.getObject() 来获取对象。检查其类,您将看到驱动程序为该类型返回的内容(BigDecimal 此处); getDouble() 只是将其转换为 double - 这可能会导致一些精度损失,因此使用 BigDecimal 可能会更好。 (getInt 也是如此)

    注意:rset.getString() 也可以,返回数字的文本表示 (String)。

    【讨论】:

    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 2014-09-11
    • 2020-05-24
    • 2023-03-29
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多