1

我有一个组合三个表的 SELECT 查询。我想通过分隔 MYSQL 表将它们添加到 Jtable 中。我只想知道如何识别结果集中的表名?

resultLoad("SELECT sqNum,RegDate,JobNo,DecName,NoOfLines,EntryType,EntrySubType,EntrySubType2,Amount,Status FROM paysheet WHERE  TypeBy='" + cmbStaff.getSelectedItem().toString() + "' AND CommissionStatus='no' UNION SELECT sqNum,RegDate,JobNo,DecName,NoOfLines,EntryType,EntrySubType,EntrySubType2,Amount,Status FROM creditsheet WHERE  TypeBy='" + cmbStaff.getSelectedItem().toString() + "' AND CommissionStatus='no' ORDER BY RegDate UNION SELECT sqNumber,date,JobNumber,DecName,noOfLines,type,type,type,CommissionAmount,status FROM newjobsheet WHERE  TypeBy='" + cmbStaff.getSelectedItem().toString() + "' AND CommissionStatus='no' ORDER BY RegDate");

private void resultLoad(String loadQuery) {

    try {
        Connection c = DB.myConnection();
        Statement s = c.createStatement();
        ResultSet r = s.executeQuery(loadQuery);

        while (r.next()) {
            Vector v = new Vector();
            v.addElement(r.getString("sqNum"));
            v.addElement(r.getString("RegDate"));
            v.addElement(r.getString("JobNo"));
            v.addElement(r.getString("DecName"));
            v.addElement(r.getString("NoOfLines"));
            v.addElement(r.getString("EntryType") + " - " + r.getString("EntrySubType") + " - " + r.getString("EntrySubType2"));
            v.addElement(r.getString("Amount"));
            v.addElement(r.getString("Status"));
            tm.addRow(v);
            totalComAmount = totalComAmount + Integer.parseInt(r.getString("Amount"));
        }
    } catch (Exception e) {
        //  e.printStackTrace();
        JOptionPane.showMessageDialog(this, e, "Error!", JOptionPane.ERROR_MESSAGE);
    }
}

我想通过对日期进行排序来像这样添加到 Jtable 中。但是这三个表包含不同的列。

4

3 回答 3

6

从您的结果集中,您可以获得 ResultSetMetaData。它看起来像这样:

rs.getMetaData().getTableName(int Column);
于 2012-07-29T17:52:30.223 回答
1

“我想通过分隔表格将它们添加到表格中。”

不知道你的意思是什么,但是:

“我只想知道如何识别结果集中的表名?”

答案是否定的,除非您重写查询以便它为您执行此操作。

SELECT 语句产生一个新的(虚拟)表——它提供的任何列在技术上都是该新虚拟表的列。结果不记得那些列的来源

但是,您可以编写查询,以便为 SELECT 列表中的每个表达式提供一个列别名,以便您识别来源。例如,您可以这样做:

SELECT table1.column1 AS table1_column1
,      table1.column2 AS table1_column2
,      ...
,      table2.column1 AS table2_column1
,      ...
FROM   table1 INNER JOIN table2 ON ... etc

如果下划线不适合您的目的作为分隔符,那么您可以考虑引用别名并选择您喜欢的任何字符作为分隔符,包括一个点:

SELECT table1.column1 AS `table1.column1`
,      ....
etc.

更新:

我刚刚注意到您的查询是多个表的 UNION。显然这种方法在这种情况下是行不通的。我认为您最好的选择仍然是重写查询,使其显示为:

SELECT 'paysheet' as table_name, ...other columns...
FROM   paysheet
UNION
SELECT 'creditsheet', ...other columns...
...
于 2012-07-29T17:48:49.780 回答
0

在我看来,您想SELECT从三个单独的表中获取数据并将其作为一个 ResultSet 在一个查询中返回,然后您想将结果分离回单独的表中。

这完全违反直觉。

如果您希望将结果分开以便能够分别查看每个表的结果,最好的办法是执行 3 个不同的SELECT查询。基本上,你要求它结合 3 件事,然后一次将它们分开。不要这样做;如果您一开始就将它们分开,那么将它们分开对您来说不是问题。

于 2012-07-29T17:52:55.667 回答