java如何将字符串与linkedlist中的字符串进行比较,并将结果作为布尔值插入mysql表
我有一个表“MoviesInfo”,其中包含以下字段:电影ID、动作、犯罪、戏剧、喜剧、恐怖、动画、纪录片等等
我需要将通过爬网获得的字符串(电影类型)与包含所有类型的列表进行比较,如果该字符串在列表中,则在关联的类型列中插入“1”。例如,电影《黑暗骑士》的类型有“动作”、“犯罪”、“戏剧”。因此,我想在“动作”、“犯罪”、“戏剧”列中插入“1”,在其他列中插入“0”
这是我的代码的一部分,我从中获得了电影类型:
List<String> genre = new ArrayList<String>();
.........
Elements elms1 = doc.select("div.infobar");
Elements links1 = elms1.select("a[href]");
for(Element link1 : links1){
if(link1.attr("href").contains("/genre/"))
{
genre.add(link1.text());
}
}
.....
.....
try{
String query = "INSERT into moviesInfo (movieId, genre)" + "VALUES (?, ?)";
PreparedStatement preparedStmt = conn.prepareStatement(query);
preparedStmt.setString (1, ImdbID);
preparedStmt.setString (2, genre.toString());
preparedStmt.executeUpdate();
}catch (Exception e)
{
System.err.println("Got an exception!");
System.err.println(e.getMessage());
}
我希望我能澄清我的问题,所有的想法都受到高度赞赏
# 1 楼答案
当一个项目有不同的过滤类别时,有不同的策略来处理这种情况
添加列
每个类别在数据表中表示为附加列,值为0或1表示匹配
通过添加关系
您创建了一个具有mamy to many关系的表,其中存储了项与类别的关系
通过添加遮罩
建立一个称为mask的二进制值,其中每个位置对应于类别
科幻喜剧的面具是科幻喜剧的面具,戏剧的面具是科幻喜剧的面具
通过添加非规范化
您只需将值存储在单个列中,并用分隔符分隔它们。使用regexp可以确定该项应用于此类类别
每种方法都有优缺点。在选择方法之前,有各种各样的权衡,我很可能在将来不得不改变
因此,与其关注givedb策略,不如选择其中一种。并在应用程序中为其创建一个简单的API。电影与类别匹配的逻辑不应该公开,所以你可以很快改变它
public Collection<Movie> findByCategories(Category... categories)
这是最终产品什么是{}和{}
类别代表描述电影性别的简单对象
电影代表了电影,所以在它的结构中我们应该有一些属性
或
# 2 楼答案
终于,我可以解决我的问题了。我不得不使用linkedList和LinkedHashMap来存储流派。(我使用linkedHashMap而不是HashMap来保持顺序)。这是一个运行良好的新代码:
# 3 楼答案
您可能需要一个DTO(数据传输对象),您可以使用它来将类型转换为
DTO:
填充DTO:
现在,当您将此流派添加到数据库中时,只需将流派为true的时间设置为“1”