【问题标题】:jdbc4 - how to insert money type?jdbc4 - 如何插入货币类型?
【发布时间】:2011-08-24 22:16:23
【问题描述】:

我遇到了一个有趣的问题...我有 MSSQL (2005) 表 A,其中包含货币类型列;问题是我想通过 Java 代码的 T-SQL 过程调用向该列插入值,但我不太确定应该使用哪种 Java 类型来准备该列的语句以插入值? 我找不到任何示例,所以也许您可以分享一些有用的 sn-ps。

感谢任何有用的评论

【问题讨论】:

    标签: sql-server-2005 jdbc database-connection


    【解决方案1】:

    您不能只使用double(或者float,但可能不会)吗?另外,在数据库中使用MONEY 可以获得什么?我发现 DECIMAL 更加可靠和灵活 - 有关一些背景信息,请参阅 Bad habits to kick : choosing the wrong data typePerformance / Storage Comparisons : MONEY vs. DECIMAL(抱歉,缺少图片)。

    【讨论】:

    • Emm...money 类型对于 00.00 类型来说是一种常见的东西,所以我在我的 MSSQL 数据库中使用它...我听说 Java 有 money 类型,所以它会有帮助吗?
    • 我不确定 Java 中是否存在反映 MONEY 的基本类型 - 至少我没有在此处看到任何此类内容:softpixel.com/~cwright/programming/datatypes.java.php。无论如何存储00.00MONEY不是“通常的事情” - DECIMAL 是。你读过我指出的文章吗?
    • 没有原始类型作为货币,正如我所看到的,但是有一个类 Money java2s.com/Code/Java/Data-Type/Moneytype.htm 包含 BigDecimal 所以也许它会有所帮助......
    • 最大的问题是我不确定如何将“Money”对象与 MS jdbc4 驱动程序及其 PrepareSatement 一起使用……那么我应该使用什么来“设置”呢?像 setObject(int,Money) 这样的东西?因为我在那里找不到“setMoney(...)”方法
    • @user592704 为什么需要在数据库中使用 MONEY?上面的链接肯定指出了一些问题,这些问题让我想重新访问一些使用 MONEY 的旧数据库......
    【解决方案2】:

    好的... 我能弄清楚的事情是不要直接使用货币类型,因为 jdbc4 连接器 PrepareSament 不包含 setMoney 等,所以我想分享一些四处走走......当然,这不是最终的代码方式,但仍然......

    所以

    • A) 来自 here 的 Money 类以获取字符串为 $00.00 displayAsDollars 方法

    • B) 使用类似 a 的代码创建 mssql 过程

      create procedure aschema.test @a varchar(10)
      AS
      BEGIN
      
      DECLARE @b money    
      SET @b=CAST @a AS MONEY
      
      --todo: insert next...
      
      END;
      
    • C) 所以 proc 调用非常简单

      Money m=new Money("12.99");
      
      callableStatement = (SQLServerCallableStatement) connection.prepareCall(
                              "{call "+
                              DATABASE_NAME+
                              "."+
                              SCHEMA_NAME+
                              ".test(?)}");
      callableStatement.setString(1,m.displayAsDollarsCorrectly());
      callableStatement.executeUpdate();
      

      //...

    正如我所说,这不是最终的代码决定,而是一个临时概念,如果您确实需要在旧的 mssql 数据库中使用货币类型,这也可能会有所帮助。至少在我的情况下这是一个临时答案:)

    我希望它对某人有帮助:)

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 2022-03-13
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      相关资源
      最近更新 更多