2016-11-25 98 views
2

与JDBC的连接工作正常。这是访问数据库表的代码。文件名 -如何从select查询的结果集中创建Java对象?

FlightDB.java 模式 - Flights1(flno INT,时间时间戳)

public static Flight selectFlight(Flight flight) throws SQLException{ 
    PreparedStatement ps = null; 
    ResultSet rs = null; 
    String q1 = "Select * from Flights1 f order by f.time"; 
    Flight flight1 = null; 
    try{ 
     ps = connection.prepareStatement(q1); 
     rs = ps.executeQuery(); 
     while(rs.next()){ 
      Flight flight1 = new Flight(); 
      flight1 = new Flight(); 
      flight1.setflno(rs.getInt(1)); 
      flight1.settime(rs.getTimestamp(2)); 
      // System.out.println(“new flight:” +flight1.getflno()); Correct output printed here 
     } 
    } 
    finally{ 
     closeResultSet(rs); 
     closePreparedStatement(ps); 
    } 
    return flight; 
} 

这是顶级代码的一部分------------文件名:Display.java

static Flight showFlights(ResultSet rs) throws SQLException { 
    Flight flight1 = new Flight(); 
    AirDB.selectFlight(flight1); 
    // flight1.setflno(rs.getInt(1)); 
    // flight1.settime(rs.getTimestamp(2)); 
    System.out.println("New flight " + flight1.getflno());//OP: New flight 0 
    return flight1; 
} 

这是我班航班---- Flight.java

public Flight() { 
    flno = 0; 
    time = null; 
} 

public Flight(int flno ,Timestamp time) 
{ 
    this.flno = flno; 
    this.time = time; 
} 

public int getflno(){ 
    return flno; 
} 

public void setflno(int flno){ 
    this.flno = flno; 
} 

public Timestamp gettime(){ 
    return time; 
} 

public void settime(Timestamp time){ 
    this.time = time; 
} 

我得到0(德故障值)作为我的输出,这是不正确的。我想打印来自顶级java文件的输出。我尝试使用flight1 = AssignFlights1.showFlights(rs);也在FlightDB.java中。

感谢您查看此代码。你能帮我解决这个问题吗?谢谢。

回答

4

您正在返回错了对象(也看到我的在线评论)

尝试

public static Flight selectFlight() throws SQLException{ // no param needed 
    PreparedStatement ps = null; 
    ResultSet rs = null; 

    // I guess that this will not be the query you want in the end 
    String q1 = "Select * from Flights1 f order by f.time";   
    Flight flight1 = null; 
    try{ 
    ps = connection.prepareStatement(q1); 
    rs = ps.executeQuery(); 
    if (rs.next()){ // only returning one object so no needed for while 
     flight1 = new Flight(); 
     flight1.setflno(rs.getInt(1)); 
     flight1.settime(rs.getTimestamp(2)); 
     System.out.println(“new flight:” +flight1.getflno()); Correct output printed here 
    } 
    } 
    finally{ 
    closeResultSet(rs); 
    closePreparedStatement(ps); 
    } 
    return flight1; 
} 

此外,如果你正确地缩进代码是很多更容易阅读和调试

+0

谢谢你的回应。对不起,但我没有提到,我必须在这里返回多行。 – meg

+0

在这种情况下,将它们添加到(并返回一个)'ArrayList ' –

0

你应该返回flight1对象不是flight如下所示:

public static Flight selectFlight() throws SQLException{ 
    PreparedStatement ps = null; 
    ResultSet rs = null; 
    String q1 = "Select * from Flights1 f order by f.time"; 
    Flight flight1 = null; 
try{ 
    ps = connection.prepareStatement(q1); 
    rs = ps.executeQuery(); 
    if(rs.next()){ 
     flight1 = new Flight(); 
     flight1.setflno(rs.getInt(1)); 
     flight1.settime(rs.getTimestamp(2)); 
     // System.out.println(“new flight:” +flight1.getflno()); Correct output printed here 
     } 
    } 
finally{ 
    closeResultSet(rs); 
    closePreparedStatement(ps); 
} 
    return flight1; 
} 

此外,不要使用while单记录,而是使用if单记录。

相关问题