gpt4 book ai didi

Java JDBC 选择记录

转载 作者:行者123 更新时间:2023-12-01 20:23:16 25 4
gpt4 key购买 nike

我正在做一个小项目,现在遇到了问题。我需要在我的数据库中搜索具有相同类型的所有电影。我为这个东西写了这个函数,但效果不太好。原则上,我希望为找到的每个结果创建一个名为 Movie 的新对象并返回他。我测试了我的功能,但我有两部电影具有相同的gerne,而他只返回给我一个对象。我的问题是为什么不归还所有对象?他应该归还我所有的元素。

public Movie extraction(String Genre)throws SQLException{
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("select * from movies where genre='"+Genre+"'");
while(rs.next()){
String name=rs.getString("name");
String genre=rs.getString("genre");
int year=rs.getInt("year");
int metascore=rs.getInt("metascore");
System.out.println(name);
return new Movie(name,genre,year,metascore);
}
return null;
}

最佳答案

这里的问题是您在循环内返回,而不是将结果添加到列表并在循环完成时返回该列表。

该代码还有其他几个问题,这些问题与您的问题无关,但可能会在将来产生问题:

  1. 您创建一个语句和一个结果集,并且永远不会关闭它们。
  2. 您正在使用字符串串联而不是 PreparedStatement 来生成查询。如果字符串 Genere 是从某个不受信任的用户(例如在 Web 应用程序中)收到的,则该用户可能会使用 SQL 注入(inject)将查询转换为他想要的任何内容。

更好的解决方案(警告:未经测试)如下所示:

List<Movie> movies = new ArrayList<>();

try(PreparedStatement stmt= con.prepareStament("select * from movies where genre=?")) {
stmt.setString(1, Genere);
try(ResultSet rs = stmt.executeQuery()) {
while(rs.next()){
String name=rs.getString("name");
String genre=rs.getString("genre");
int year=rs.getInt("year");
int metascore=rs.getInt("metascore");
movies.add(new Movie(name,genre,year,metascore));
}
}
}
return movies;

try 语句(称为“try with resources”)确保在 block 结束时调用该语句和结果集 .close 方法。

关于Java JDBC 选择记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44265514/

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