У меня такой запрос
BEGIN IF NOT EXISTS (
SELECT * FROM some_table with(nolock)
WHERE col_1 = ? and col_2 = ? and col_3 = ?)
BEGIN
INSERT INTO some_table (col_1, col_2, col_3, col_4, col_5, col_6,
col_7, col_8, col_9, col_10, col_11, col_12, cdate)
VALUES
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, convert(date, GETDATE()))
END
ELSE
BEGIN
UPDATE some_table
SET col_4 = col_4 + ?,
col_5 = col_5 + ?,
col_6 = col_6 + ?,
col_7 = col_7 + ?,
col_8 = col_8 + ?,
col_9 = col_9 + ?,
col_10 = col_10 + ?,
col_11 = ?
WHERE col_1 = ? and col_2 = ? and col_3 = ?
END
END
И из-за некоторых требований я должен сохранить это Query
в String
, что для меня уже очень больно. Но для этого я создал PreparedStatement
, который выглядит следующим образом:
PreparedStatement preparedStatemnt = conn.prepareCall(sqlQuery)) {
preparedStatemnt.setInt(1, value1);
preparedStatemnt.setString(2, value2);
preparedStatemnt.setString(3, value3);
preparedStatemnt.setInt(4, value1);
preparedStatemnt.setString(5, value2);
preparedStatemnt.setString(6, value3);
preparedStatemnt.setInt(7, value4);
preparedStatemnt.setInt(8, value5);
preparedStatemnt.setInt(9, value6);
preparedStatemnt.setInt(10, value7);
preparedStatemnt.setInt(11, value8);
preparedStatemnt.setInt(12, value9);
preparedStatemnt.setInt(13, value10);
preparedStatemnt.setInt(14, value11);
preparedStatemnt.setString(15, value12);
preparedStatemnt.setInt(16, value4);
preparedStatemnt.setInt(17, value5);
preparedStatemnt.setInt(18, value6);
preparedStatemnt.setInt(19, value7);
preparedStatemnt.setInt(20, value8);
preparedStatemnt.setInt(21, value9);
preparedStatemnt.setInt(22, value10);
preparedStatemnt.setInt(23, valye11);
preparedStatemnt.setInt(24, value1);
preparedStatemnt.setString(25, value2);
preparedStatemnt.setString(26, value3);
, как вы можете видеть здесь значение, которое я должен указать, может быть повторено, и я предпочел бы избежать этого, но я не знаю, есть ли какая-либо возможность.
И вот мой вопрос, есть ли способ создать эти утверждения таким образом, как String.fromat
работает, я имею в виду
String.format("%1s, %1s, %1s, %1s", value1); // so the First(1) value is putted into all 4 places
Я думал о используя String.format
для их создания, но я почти уверен, что это не безопасно, не так ли? Или, может быть, кто-то может дать мне другое предложение, как работать с таким утверждением, это было бы очень полезно, потому что у меня есть много подобных запросов, которые я должен создать.
Ps. Я не могу использовать хранимые процедуры.