gpt4 book ai didi

java - 在连接之前检查数字是否已经在字段中?

转载 作者:行者123 更新时间:2023-11-30 23:03:16 24 4
gpt4 key购买 nike

我正在编写一个爬虫,它会扫描许多 url,然后将在每个网页中找到的所有单词放入一个表中。在同一张表中,存储了 url 的 ID。如果该词在另一个页面中重复出现,则会将找到该词的网址的 ID 连接起来,并用逗号分隔它们。因此,如果一个词出现在多个页面上,则该字段中所有串联的 ID 数字可能如下所示:

2,3,6,8,9

目前,如果该号码在同一页面出现多次,则每次找到该号码时都会添加ID号码,因此URLID字段可能会结束看起来像:

2,2,2,4,7,8,8,8,8,8,9,9

使用 Java 有没有办法让我检查该字段中是否已经存在该数字,并且仅在该数字不存在时才添加它?我查看了 api,但似乎找不到合适的方法来执行此操作。有什么想法吗?


添加:

public void updateWordTable( String[] array, int urlid ) throws SQLException, IOException {
Statement stat = connection.createStatement();
String wordQuery;
String query;


for (String item : array) {
if(item.matches("[A-Za-z0-9]+")){
wordQuery = "SELECT * FROM word WHERE word = '"+item+"'";
ResultSet rs = stat.executeQuery(wordQuery);
if(!rs.next()){
query = "INSERT INTO word VALUES ('"+item+"',"+urlid+")";
stat.executeUpdate( query );
}
else {
//query = "UPDATE word SET urlid = concat(urlid, ',"+urlid+"') WHERE word = '"+item+"' ";
//query = "UPDATE word SET urlid = CASE WHEN FIND_IN_SET( '"+urlid+"', urlid ) > 0 THEN urlid ELSE CONCAT( urlid, ',', '"+urlid+"' )END WHERE word = '"+item+"' ";

String query2 = "UPDATE word SET urlid = CASE WHEN FIND_IN_SET( ?, urlid ) > 0 THEN urlid ELSE CONCAT( urlid, ',', ? )END WHERE word = ? ";

PreparedStatement pst = connection.prepareStatement( query2 );

pst.setLong( 1, urlid );
pst.setLong( 2, urlid );
pst.setString( 3, item);

int result = pst.executeUpdate();

//stat.executeUpdate( query2 );
}
}
}

stat.close();
}

最佳答案

... is there a way I get it to check if the number exists in the field already and only add it if it is not already there?

您可以使用 JAVA 完成此操作,但将检查留给 MySQL,因为它具有此类搜索功能。

使用 MySQL,您可以对列中的逗号分隔值使用 FIND_IN_SET 函数。这将解决您不在 JAVA 中重新处理以查找是否存在此类 ID 的问题。

select 
FIND_IN_SET( value_to_find, column_with_cs_values ) > 0 as bool_matched
from table_name

如果需要,添加where 条件和其他条件。

在 JAVA 代码中,您只需读取 getBoolean 的结果集。

boolean idMatched = rs.getBoolean( "bool_matched" );

if( idMatched ) {
// dont update table
}
else {
// update table
}

或者,您可以直接更新 表列。

示例:

UPDATE table_name
SET column_name_with_cs_values =
CASE WHEN FIND_IN_SET( value_to_find,
column_name_with_cs_values
) > 0 THEN column_name_with_cs_values
ELSE CONCAT( column_name_with_cs_values, ',', value_to_find )
END
-- add where etc here
;

在 JAVA 中,您可以像下面这样使用 PreparedStatement 来使用上面的查询。

String query = "UPDATE word 
SET urlid = CASE WHEN FIND_IN_SET( ?, urlid ) > 0 THEN urlid
ELSE CONCAT( urlid, ',', ? )
END
WHERE word = ? ";

PreparedStatement pst = con.prepareStatement( query );

pst.setString( 1, urlid );
pst.setString( 2, urlid );
pst.setString( 3, item);

int result = pst.executeUpdate();

关于java - 在连接之前检查数字是否已经在字段中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22981849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com