JBDC:查询后检索对象列表

JBDC : retrieve a list of object after a query

我正在尝试编写一个简单的 jdbc 程序来与我的嵌入式 H2 数据库进行交互。我尝试执行的查询如下:

 "SELECT * FROM MILESTONE WHERE NAME=TEST"

这里的问题是很多对象可以有相同的名字(只有ID是唯一的)。而且我不知道如何检索数据库中具有相同名称的所有对象。 到目前为止,我写了这个程序:

public Milestone findByName(String name) throws ClassNotFoundException, SQLException {

    Milestone milestone = new Milestone();

    Class.forName("org.h2.Driver");
    Connection connection = DriverManager.getConnection("jdbc:h2:~/dao_db", "sa", "");
    PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM MILESTONE WHERE NAME=?");
    preparedStatement.setString(1, name);

    System.out.println("Milestone selected with name = "+  name);

    ResultSet resultSet = preparedStatement.executeQuery();

    if(resultSet.next())
       {
         milestone.setId(resultSet.getString("id"));
         milestone.setName(name);
         milestone.setDescription(resultSet.getString("description"));
        }

    connection.close();

    return milestone;
}

问题在于此代码仅 returns 一个元素(具有第一个 ID)而忽略了我数据库中具有相同名称的其他对象。

你能帮我解决这个问题吗?我对 Java 中的列表概念不是很熟悉。谢谢

你的if条件应该是while:

try{
    PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM MILESTONE WHERE NAME=?");
    preparedStatement.setString(1, name);

    System.out.println("Milestone selected with name = "+  name);
    ResultSet resultSet = preparedStatement.executeQuery();

    List<Milestone> list = new ArrayList<>();
    while(resultSet.next(){
         Milestone milestone= new Milestone();
         milestone.setId(resultSet.getString("id"));
         milestone.setName(name);
         milestone.setDescription(resultSet.getString("description"));
         list.add(milestone);
    }
}
finally{
    if(connection != null){
        try{
            connection.close();
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
}
return list;