2016-11-25 12 views
2

JDBCへの接続が正常に動作しています。これは、データベーステーブルにアクセスするコードです。 ------------ Flights1(flno int型、タイムスタンプ)選択クエリの結果セットからJavaオブジェクトを作成するにはどうすればよいですか?

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

そして、これはトップレベルのコードの一部です - ファイル名 -

FlightDB.java スキーマファイル名: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を使用してください。

関連する問題