MySQL提供正确的输出,但Java引发异常

MySQL提供正确的输出,但Java引发异常,java,mysql,sql,Java,Mysql,Sql,我想展示以下信息- 航班日期|姓名起飞时间|公务舱可用性|行政舱可用性|经济舱可用性 现在所有的信息都在不同的表格中 Table sector - sectorID | description | weekday1 | weekday2 | bfare | xfare | efare Table flights - flightno | deptime | arrtime | aircrafttypeID | sectorID Table aircraft - aircraftTypeID |

我想展示以下信息-

航班日期|姓名起飞时间|公务舱可用性|行政舱可用性|经济舱可用性

现在所有的信息都在不同的表格中

Table sector - sectorID | description | weekday1 | weekday2 | bfare | xfare | efare
Table flights - flightno | deptime | arrtime | aircrafttypeID | sectorID
Table aircraft - aircraftTypeID | description | bseats | xseats | eseats
scheduleID - flightno | flightdate | bcsavailable | xcsavailable | ecsavailable
查询:显示计划于2013年6月17日从加尔各答飞往艾哈迈达巴德的航班,航班类别为商务舱

第1部分-我正在尝试获取座位超过0且来源和目的地匹配的航班号, 第2部分-然后我将从ScheduledFlaghts表中获取日期和航班号匹配的记录。 当我在MySQL查询窗口中运行此查询时,我得到了正确的输出,但当我在Java中执行相同的查询时,它会给我一个错误-

列索引超出范围,2>1

SQL版本

SELECT flightno
FROM flights
WHERE aircrafttypeID
IN (
SELECT aircraftTypeID
FROM aircraft
WHERE aircrafttypeID
IN (
SELECT aircrafttypeID
FROM sector, flights
WHERE source LIKE  'Kolkata'
AND destination LIKE  'Ahmedabad'
AND sector.sectorID = flights.sectorID
)
AND bseats >0)
以上查询的输出为FJA23和FJA24 2记录,正确无误

Java版本

String origin=jComboBox3.getSelectedItem().toString();
        String target=jComboBox4.getSelectedItem().toString();
        String fclass=jComboBox1.getSelectedItem().toString();
        String search = "";
        if(fclass.equals("Business"))
        {
            search="AND bseats>0";
        }
        if(fclass.equals("Executive"))
        {
            search="AND xseats>0";        
        }
        if(fclass.equals("Economy"))
        {
            search="AND eseats>0";
        }
        String sql="SELECT flightno FROM flights WHERE aircrafttypeID IN "
                + "(SELECT aircraft.aircrafttypeID FROM aircraft WHERE aircrafttypeID IN "
                + "(SELECT aircrafttypeID FROM sector,flights WHERE source LIKE '"+ origin 
                + "' AND destination LIKE '" + target + "' AND sector.sectorID=flights.sectorID) " + search+")";

        System.out.println(sql);

我从@Home得到了一个小小的提示,让我看看闪闪发光的灯光。当我看到printstack时,它显示了我的这部分代码

while(rs.next())
           {
               String var1=rs.getString(1);
               //String var2=rs.getString(2);
               //String var3=Integer.toString(rs.getInt(3));
               //String var4=Integer.toString(rs.getInt(4));
               //String var5=Integer.toString(rs.getInt(5));
               //System.out.println(var1+" " + var2+" "+var3+" "+var4+" "+var5);
               System.out.println(var1);
           }
正在引发异常,因为我试图从多个resultset中不可用的1中获取数据

谢谢大家调查我的问题。
但我仍然很困惑如何从不同的表中获取数据。我是否需要从每个列数据中进行多个查询。

因为您只选择了一列,而
您的异常表明您引用的是列索引>1..可能您正在执行此resultSet.getXXX2。

很好,您已经找出了代码中的错误。就从多个表获取数据而言,我在java代码中使用以下类型的SQL

选择a.col1、b.col2、c.col3

表1为a,表2为b,表3为c

其中a.col1='abc'和b.col2介于1和100之间

希望能有帮助


所有最好的干杯

1请显示错误的堆栈跟踪。2我们不知道查询是否相同,请显示System.out.printlnsql的结果。异常是什么,它来自哪里?SQL只返回一列。如果只有一列,则不能引用第二列。如何调用数据库,以及如何处理结果集?也显示该代码。@home SELECT flightno FROM flights WHERE aircrafttypeID IN SELECT aircraft.aircrafttypeID FROM aircrafttypeID IN SELECT aircrafttypeID FROM sector中的aircraft,aircrafttypeID FROM aircrafttypeID FROM sector中的aircraft,来源为'Kolkata',目的地为'Ahmedabad'和sector.sectorID=flights.sectorID和bseats>0。