繁体   English   中英

HSQLDB子查询-Java

[英]HSQLDB Subquery - Java

在Microsoft Access中,我有三个有效的查询-

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");
                    }
                }
            }
        });

如何编写第三个查询以在单击按钮时执行? 我知道它需要知道要执行的前两个查询的结果,所以我不确定如何编程。

您可以使用WITH子句轻松完成此操作:

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

将每个查询的全文放在上面的模板中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM