该表有四列id
、name
和。我需要创建一个 void changeDescription() 方法,该方法从描述超过 100 的所有产品的描述中删除最后一句。我制作了该方法,直到最后一句被删除。 description
price
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();
}
}
但是后来我不知道如何更新表中的数据,在描述列中。如何在更新请求中替换descriptionNew
?
一般来说,做所有事情都
UPDATE
非常简单。总体思路是这样的:该表达式
instr(description, '.', -1, 2)
从末尾开始查找第二个点。如果它没有找到(返回0
),那么描述不会改变,如果是,那么从第一个字符到这个点的子字符串。当然,这里有很多假设:没有点、缩写、没有带点分隔符的日期和数字、点位于每个句子的末尾等。但总的来说,找到最后一个句子的任务是仍然无法解决。除了神经网络。第二个问题与
CLOB
. 上面的查询只适用于varchar2
,但CLOB
最好使用 packageDBMS_LOB
。它具有完全相同的功能substr
和instr
.