Я использую запрос «вставить или обновить», такой как приведенный ниже:
String sql =
"INSERT INTO servlets (path, applicationId, startTime, numOfRequests, totalResponseTime, totalBytes)" +
"VALUES (?, ?, NOW(), 1, ?, ?)" +
"ON DUPLICATE KEY UPDATE numOfRequests = numOfRequests + 1, " +
"totalResponseTime = totalResponseTime + ?, totalBytes = totalBytes + ?";
Я использую подготовленные операторы и заполняю их соответствующими аргументами следующим образом:
statement = connection.prepareStatement(sql);
statement.setString(1, i_ServletModel.GetPath());
statement.setInt(2, i_ServletModel.GetApplicationId());
statement.setLong(3, i_RequestStats.GetResponseTime());
statement.setLong(4, i_RequestStats.GetBytes());
statement.setLong(5, i_RequestStats.GetResponseTime());
statement.setLong(6, i_RequestStats.GetBytes());
Обратите внимание, что аргумент 3 в точности совпадает с аргументом 5, а аргумент 4 в точности совпадает с аргументом 6, поскольку они требуют одинакового значения в приведенном выше запросе.
Можно ли что-либо изменитьили в запросе, или в методах заполнения аргументов, чтобы избежать такого "уродливого" синтаксиса?