0

我想显示以下信息 -

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

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

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 部分 - 然后我将从 scheduleflights 表中获取日期和航班号匹配的那些记录。当我在 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);
4

3 回答 3

0

由于您只选择一列并且您的异常表明您正在引用列索引> 1(..可能您正在执行此 resultSet.getXXX(2)。)

于 2013-06-14T17:00:31.267 回答
0

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

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

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

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

希望能帮助到你。

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

于 2013-06-14T17:12:03.710 回答
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 个以上的数据中获取数据

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

于 2013-06-14T16:58:50.347 回答