Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 结果集开始之前的MySQL_Java_Mysql - Fatal编程技术网

Java 结果集开始之前的MySQL

Java 结果集开始之前的MySQL,java,mysql,Java,Mysql,我试图从一个表中获取personID,并在第二个表中使用它,然后从中打印每列值 但是,第二个表显示错误列索引超出范围,3

我试图从一个表中获取personID,并在第二个表中使用它,然后从中打印每列值 但是,第二个表显示错误
列索引超出范围,3<1
。订单表由3列组成

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());
    }
}
public void getPersonsOrders(字符串名){
连接con=connect();
试一试{
语句s=con.createStatement();
s、 执行更新(“使用stl;”;
ResultSet rs1=s.executeQuery(“从person中选择personID,其中first_name=“+””“+firstName+”“+”;”;//获取人员ID号。
rs1.next();
ResultSet rs2=s.executeQuery(“从orderr中选择*,其中personID=“+rs1.getInt(3)+;”;”;//使用ID号
对于(inti=1;i<4;i++){//检索顺序
System.out.println(rs2.getInt(i));
}
}
捕获(SQLE异常){
System.out.println(“3”+e.getMessage());
}
}

rs1
中只返回一列,因此您应该使用
rs1.getInt(1)

另一方面,使用联接可以轻松解决此问题:

SELECT o.* FROM order o
LEFT JOIN person p
ON p.personID = o.personID
上面的代码将生成一个只包含一列的结果。使用此代码可使其无错误

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));
 }
ResultSet rs2=s.executeQuery(“从order中选择*,其中personID=“+rs1.getInt(3)+”;”//使用身份证号码

对于(inti=1;i为了帮助编写更好的代码,我想提到几个问题:

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)。

rs1.getInt(3)
-在
rs1
中只有一列(具有索引1)查看SQL连接
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));
 }