2014-01-14 48 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)。

相关问题