2014-01-14 47 views
0

我想從一個表中獲取personID並將其用於第二個表中,並且從第二個表中打印每個列值 ,但是我收到了錯誤column index out of range, 3 < 1。訂單表由3列組成。結果集開始之前的MySQL

public void getPersonsOrders(String firstName){ 
    Connection con = connect();                        
    try{ 
     Statement s = con.createStatement(); 
     s.executeUpdate("use stl;"); 
     ResultSet rs1 = s.executeQuery("select personID from person where first_name = " +"'"+firstName+"'"+";");  //get persons ID no. 
     rs1.next(); 
     ResultSet rs2 = s.executeQuery("select * from orderr where personID = "+rs1.getInt(3)+";");    //use ID no. to   
     for(int i = 1; i < 4; i++){                    //retrive order 
      System.out.println(rs2.getInt(i)); 
     } 
    } 
    catch(SQLException e){ 
     System.out.println("3" +e.getMessage()); 
    } 
} 
+1

'rs1.getInt(3)' - 'rs1'中只有一列(索引爲1) –

+0

查看SQL JOIN – everton

回答

1

只有一個列在rs1返回,因此,你應該使用rs1.getInt(1)

在另一方面,這應該很容易地使用連接解決:

SELECT o.* FROM order o 
LEFT JOIN person p 
ON p.personID = o.personID 
0
ResultSet rs1 = s.executeQuery("select personID from person where first_name = "+"'"+firstName+"'"+";"); 

上面的代碼將產生僅含有一個column.Use這使它無錯誤的結果。

ResultSet rs2 = s.executeQuery("select * from orderr where personID = "+rs1.getInt(3)+";");   //use ID no. to   
for(int i = 1; i <= 1; i++){ //retrive order 
    System.out.println(rs2.getInt(i)); 
} 
0

我會喜歡一對夫婦的問題提書面更好的代碼,以幫助:

1:如果的firstName包含一個單引號,你的SQL語句將失敗(你必須在一個單引號firstrName,它本身在單引號中)。您需要將firstName中的任何單引號轉換爲兩個單引號,或使用preparedStatements。
2:它更好地使用getInt(「personID」)之類的術語而不是getInt(1),因此它更易於閱讀。
3:我們通常使用if(rs1.next()){}(期待一個結果)或while(rs1.next()){}(期望多於一個結果)而不是rs1.next()。
4:我們典型地按照它們在try/catch/finally塊的finally塊中聲明的相反順序關閉連接,preparedStatement和resultSet(在關閉它們之前檢查它們是否爲null)。

相關問題