jdbc4 - как вставить тип денег? - PullRequest
0 голосов
/ 25 августа 2011

Я столкнулся с интересной проблемой, как ... У меня есть таблица A MSSQL (2005), которая содержит столбец типа деньги;дело в том, что я хочу вставить значение в этот столбец с помощью вызова процедуры T-SQL из кода Java, но я не совсем уверен, какой тип Java следует использовать для подготовки оператора для этого столбца для вставки значения?Я не смог найти ни одного примера, поэтому, может быть, вы можете поделиться некоторыми полезными фрагментами.

Любой полезный комментарий приветствуется

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Не могли бы вы просто использовать double (или, может быть, float, но, вероятно, нет)? Кроме того, что вы получаете, используя MONEY в вашей базе данных? Я обнаружил, что DECIMAL гораздо надежнее и гибче - для некоторой предыстории см. Плохие привычки бросать: выбор неправильного типа данных и Сравнение производительности / хранилища: ДЕНЬГИ против ДЕСЯТИЧНОГО (извините за отсутствующие изображения).

0 голосов
/ 07 сентября 2011

ОК ... я могу понять, что НЕ ИСПОЛЬЗОВАТЬ денежный тип напрямую только потому, что разъем PrepareSatement jdbc4 не содержит setMoney и т. Д., Так что я хочу поделиться некоторыми возможностями ... Конечно, это не окончательный кодпуть, но все же ...

Итак

  • A) Класс денег от здесь , чтобы получить строку как $ 00,00 с displayAsDollars метод

  • B) создать процедуру 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.По крайней мере, в моем случае это был временный ответ:)

Надеюсь, это кому-нибудь пригодится :)

Удачи

...