Работает 100%.
import java.text.DecimalFormat;
public class Formatting {
public static void main(String[] args) {
double value = 22.2323242434342;
// or value = Math.round(value*100) / 100.0;
System.out.println("this is before formatting: "+value);
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
}
}
Обычно способ, которым Вы делаете это, состоит в том, чтобы передать в разделенном запятыми списке значений, и в рамках Вашей хранимой процедуры, проанализировать список и вставить его во временную таблицу, которую можно затем использовать для соединений. С SQL-сервер 2005 , это - общепринятая практика для контакта с параметрами, которые должны содержать массивы.
Вот хорошая статья о различных способах иметь дело с этой проблемой:
Передача списка/массива к хранимой процедуре
SQL Server, Но для SQL-сервер 2008 , мы наконец добираемся для передачи табличных переменных в процедуры первым определением таблицы как пользовательский тип.
существует хорошее описание этого (и больше 2 008 функций) в этой статье:
Введение в Новые Функции Программируемости T-SQL в SQL Server 2008
Вы можете с SQL 2008 . Это не отсутствовало очень долго, но это доступно.
Можно использовать xml тип параметра:
CREATE PROCEDURE SelectByIdList(@productIds xml) AS
DECLARE @Products TABLE (ID int)
INSERT INTO @Products (ID) SELECT ParamValues.ID.value('.','VARCHAR(20)')
FROM @productIds.nodes('/Products/id') as ParamValues(ID)
SELECT * FROM
Products
INNER JOIN
@Products p
ON Products.ProductID = p.ID
Нет. Параметры похожи на значения SQL в повиновении первая нормальная форма , в основном, может только быть тот...
, Поскольку Вы, вероятно, знаете, генерация строк SQL является опасным бизнесом: Вы оставляете себя открытыми для атака с использованием кода на SQL . Пока Вы имеете дело с добросовестным GUID, необходимо быть в порядке, но иначе, несомненно, необходимо будет чистить вход.
Вы не можете передать список как единственный Параметр SQL. Вы могли представить в виде строки. Соединение ('') ГУИДЫ такой как "0000-0000-0000-0000, 1111-1111-1111-1111", но это было бы высоко на базе данных, служебной и субоптимальной действительно. И необходимо передать целую строку как единственный связанный динамический оператор, Вы не можете добавить его в качестве параметра.
Вопрос:
, Где Вы получаете свой список идентификатора, от которого представляют неактивных клиентов?
Мое предложение состоит в том, чтобы приблизиться к проблеме немного по-другому. Переместите всю эту логику в базу данных, что-то как:
Create procedure usp_DeactivateCustomers
@inactive varchar(50) /*or whatever values are required to identify inactive customers*/
AS
UPDATE Customer SET c.Active = 0
FROM Customer c JOIN tableB b ON c.CustomerID = b.CustomerID
WHERE b.someField = @inactive
И вызов это как хранимая процедура:
public void InactiveCustomers(string inactive)
{
//...
myAdoCommand.CommandText =
"usp_DeactivateCustomers";
myAdoCommand.Parameters["@inactive"].Value = inactive;
//...
}
<час> , Если список GUID существует в базе данных, почему, я должен: найдите их; поместите их в универсальный список; раскрутите список в CSV/XML/Table переменную, только для представления их назад DB снова????? Они уже там! Я пропускаю что-то?