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;
我正在尝试编写一个简单的 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;