В таблице четыре колонки id
, name
, description
и price
. Мне надо создать метод void changeDescription() который удаляет последнее предложение из description всех продуктов с длинной описания более 100. Метод я сделал до момента удаления последнего предложения.
private static void changeDescription(){
try(Connection connection = DriverManager.getConnection(DB_URL, USER, PASS); Statement statement = connection.createStatement()) {
String descriptionNew = "";
try(ResultSet resultSet = statement.executeQuery("SELECT * FROM PRODUCT")){
while (resultSet.next()){
String description = resultSet.getString(3);
if (description.length() > 100){
String[] arraySentences = description.split("[.]");
arraySentences[arraySentences.length - 1] = "";
for (String sentence : arraySentences){
if (sentence != null && !sentence.isEmpty()){
descriptionNew += sentence + ".";
}
}
}
}
}
System.out.println(descriptionNew);
}catch (SQLException e){
System.err.println("Something went wrong");
e.printStackTrace();
}
}
А вот дальше не знаю как сделать, чтобы обновились данные в таблице, в колонке Description. Как в запрос на обновление подставить descriptionNew
?
Вообще сделать все в одном UPDATE
довольно просто. Общая идея такая:
update product
set description = case when instr(description, '.', -1, 2) = 0 then description
else substr(description, 1, instr(description, '.', -1, 2)) end
where length(description) > 100;
Выражение instr(description, '.', -1, 2)
ищет вторую точку с конца. Если не находит (возвращает 0
), то описание не изменяется, если находит - то далее берется подстрока с первого символа до этой точки. Тут, конечно, много допущений: что нет многоточий, сокращений, нет дат и чисел с точками-разделителями, точки стоят в конце каждого предложения и т. д. Но в общем виде задача поиска последнего предложения все равно не решаемая. Разве что нейросетями.
Вторая проблема с типом CLOB
. Запрос выше хорошо будет работать только с varchar2
, а с CLOB
лучше использовать пакет DBMS_LOB
. В нем есть точно такие же функции substr
и instr
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ЗдравсвуйтеОбыскал весь интернет, ничего конкретного на мой вопрос не нашёл