有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

sql如何从select查询的结果集创建Java对象?

与JDBC的连接工作正常。这是访问数据库表的代码。文件名–

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。爪哇

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;
}

这是我的班机——班机。爪哇

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。飞行表演(rs);在FlightDB中。java也是

感谢您查看此代码。你能帮我一下吗。谢谢


共 (2) 个答案

  1. # 1 楼答案

    您应该返回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

  2. # 2 楼答案

    您返回了错误的对象(另请参阅我的内联注释)

    试试看

    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;
    }
    

    此外,如果您正确缩进了代码,那么阅读和调试就会容易得多