【发布时间】:2011-08-24 22:16:23
【问题描述】:
我遇到了一个有趣的问题...我有 MSSQL (2005) 表 A,其中包含货币类型列;问题是我想通过 Java 代码的 T-SQL 过程调用向该列插入值,但我不太确定应该使用哪种 Java 类型来准备该列的语句以插入值? 我找不到任何示例,所以也许您可以分享一些有用的 sn-ps。
感谢任何有用的评论
【问题讨论】:
标签: sql-server-2005 jdbc database-connection
我遇到了一个有趣的问题...我有 MSSQL (2005) 表 A,其中包含货币类型列;问题是我想通过 Java 代码的 T-SQL 过程调用向该列插入值,但我不太确定应该使用哪种 Java 类型来准备该列的语句以插入值? 我找不到任何示例,所以也许您可以分享一些有用的 sn-ps。
感谢任何有用的评论
【问题讨论】:
标签: sql-server-2005 jdbc database-connection
您不能只使用double(或者float,但可能不会)吗?另外,在数据库中使用MONEY 可以获得什么?我发现 DECIMAL 更加可靠和灵活 - 有关一些背景信息,请参阅 Bad habits to kick : choosing the wrong data type 和 Performance / Storage Comparisons : MONEY vs. DECIMAL(抱歉,缺少图片)。
【讨论】:
MONEY 的基本类型 - 至少我没有在此处看到任何此类内容:softpixel.com/~cwright/programming/datatypes.java.php。无论如何存储00.00,MONEY 是不是“通常的事情” - DECIMAL 是。你读过我指出的文章吗?
好的... 我能弄清楚的事情是不要直接使用货币类型,因为 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 数据库中使用货币类型,这也可能会有所帮助。至少在我的情况下这是一个临时答案:)
我希望它对某人有帮助:)
祝你好运
【讨论】: