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

时间:2013-06-14 16:27:53

标签: java mysql sql

我想显示以下信息 -

日期航班|姓名出发时间|商务舱可用性|行政级可用性|经济舱可用性

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

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

QUERY :显示计划于2013年6月17日从加尔各答飞往艾哈迈达巴德的航班,并开始上课。

第1部分 - 我正试图获得座位数大于0且来源和目的地匹配的航班号, 第2部分 - 然后我将从其日期和航班号匹配的scheduledflights表中获取这些记录。 当我在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);

3 个答案:

答案 0 :(得分:0)

我从@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);
           }

抛出异常,因为我试图从结果集

中获得的多于1的数据

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

答案 1 :(得分:0)

因为您只选择一列而且 您的异常表示您正在引用列索引> 1(..可能您正在执行此resultSet.getXXX(2)。)

答案 2 :(得分:0)

很好,你已经找到了代码中的错误。至于从多个表中获取数据,我在我的java代码中使用以下类型的SQL。

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

从table1作为a,table2作为b,table3作为c

其中a.col1 ='abc'和b.col2在1和100之间;

希望它有所帮助。

所有最好的欢呼...... !!