2016-05-14 20 views
0

在Microsoft Access我有工作的三個查詢 -HSQLDB子查詢 - Java的

qryAwayMatches:

SELECT MatchTeam.FootballMatchID, MatchTeam.TeamID, MatchTeam.GameType, MatchProtocol.MatchTeamID, MatchProtocol.GoalNumber, MatchProtocol.YellowCardNumber, MatchProtocol.RedCardNumber 
FROM MatchTeam LEFT JOIN MatchProtocol ON MatchTeam.ID = MatchProtocol.MatchTeamID 
WHERE (((MatchTeam.GameType)="Away")); 

qryHomeMatches:

SELECT MatchTeam.FootballMatchID, MatchTeam.TeamID, MatchTeam.GameType, MatchProtocol.MatchTeamID, MatchProtocol.GoalNumber, MatchProtocol.YellowCardNumber, MatchProtocol.RedCardNumber 
FROM MatchTeam LEFT JOIN MatchProtocol ON MatchTeam.ID = MatchProtocol.MatchTeamID 
WHERE (((MatchTeam.GameType)="Home")); 

qryMatchResult:

SELECT qryHomeMatches.FootballMatchID, qryHomeMatches.TeamID AS HomeTeamID, qryAwayMatches.TeamID AS AwayTeamID, qryHomeMatches.GoalNumber AS HomeTeamGoals, qryAwayMatches.GoalNumber AS AwayTeamGoals, [HomeTeamGoals]>[AwayTeamGoals] AS HomeTeamWin, [HomeTeamGoals]=[AwayTeamGoals] AS NoWin, [HomeTeamGoals]<[AwayTeamGoals] AS AwayTeamWin 
FROM qryHomeMatches INNER JOIN qryAwayMatches ON qryHomeMatches.FootballMatchID = qryAwayMatches.FootballMatchID; 

在我Java程序,我展示前兩個查詢按鈕的結果按下按以下方式:

btnqryAwayMatches.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       Connection con = null; 
       Statement st = null; 
       ResultSet rs = null; 
       String s; 
       JFrame frame; 
       String url = "jdbc:hsqldb:file:db_data/myFootballDB;ifexists=true;shutdown=true"; 
       String username = "SA"; 
       String password = ""; 

       try { 
        con = DriverManager.getConnection(url, username, password); 
        st = con.createStatement(); 
        s = "SELECT MATCHTEAM.FOOTBALLMATCHID, MATCHTEAM.TEAMID, MATCHTEAM.GAMETYPE, " 
          + "MATCHPROTOCOL.MATCHTEAMID, MATCHPROTOCOL.GOALNUMBER, " 
          + "MATCHPROTOCOL.YELLOWCARDNUMBER, " 
          + "MATCHPROTOCOL.REDCARDNUMBER " 
          + "FROM MATCHTEAM LEFT JOIN MATCHPROTOCOL ON MATCHTEAM.ID = MATCHPROTOCOL.MATCHTEAMID " 
          + "WHERE (((MATCHTEAM.GAMETYPE)='Away'));"; 
        rs = st.executeQuery(s); 
        ResultSetMetaData rsmt = rs.getMetaData(); 
        int c = rsmt.getColumnCount(); 
        Vector<String> column = new Vector<String>(c); 
        for (int i = 1; i <= c; i++) { 
         column.add(rsmt.getColumnName(i)); 
        } 
        Vector<Vector<String>> data = new Vector<Vector<String>>(); 
        Vector<String> row = new Vector<String>(); 
        while (rs.next()) { 
         row = new Vector<String>(c); 
         for(int i = 1; i <= c; i++) { 
          row.add(rs.getString(i)); 
         } 
         data.add(row); 
        } 

       frame = new JFrame(); 
       frame.setTitle("Away Match Results"); 
       frame.setSize(700,420); 
       frame.setLocationByPlatform(true); 
       frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
       JPanel panel = new JPanel(); 
       JTable table = new JTable(data, column); 
       JScrollPane jsp = new JScrollPane(table); 
       panel.setLayout(new BorderLayout()); 
       panel.add(jsp, BorderLayout.CENTER); 
       frame.setContentPane(panel); 
       frame.setVisible(true); 

       } catch(Exception exc) { 
        exc.printStackTrace(); 
        JOptionPane.showMessageDialog(null, "Error"); 
       } finally { 
        try { 
         st.close(); 
         rs.close(); 
         con.close(); 
        } catch(Exception exception) { 
         JOptionPane.showMessageDialog(null, "Error close"); 
        } 
       } 
      } 
     }); 

我該如何編碼第三個查詢來執行按鈕單擊?我知道它需要知道執行前兩個查詢的結果,所以我不確定如何對此進行編程。

回答

1

您可以用輕鬆地做到這一點WITH子句:

WITH qryAwayMatches AS (SELECT MatchTeam.FootballMatchID, ...), 
    qryHomeMatches AS (SELECT MatchTeam.FootballMatchID, ...) 
    SELECT qryHomeMatches.FootballMatchID, ... 

把每個查詢的全文在上面的模板。

+0

謝謝你的回答! – vshcherbinin