从ResultSet获取MYSQL表名

时间:2012-07-29 17:45:08

标签: java mysql

我有一个SELECT查询,它结合了三个表。我想通过分离MYSQL表将它们添加到Jtable中。我只是想知道如何识别Resultset中的表名?

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中。但是这三个表包含不同的列。

3 个答案:

答案 0 :(得分:5)

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

rs.getMetaData().getTableName(int Column);

答案 1 :(得分:1)

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

不确定你的意思,但是:

“我只是想知道如何在Resultset中识别表名?”

答案是否定的,除非您重写查询以便它为您完成。

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...
...

答案 2 :(得分:0)

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

这完全违反直觉。

如果您希望将结果分开,以便能够分别查看每个表的结果,那么最好的办法是执行3个不同的SELECT个查询。基本上,你要求它结合3件事,然后在一次通过中再次分开它们。不要这样做;如果你把它们首先放在一起,将它们分开就不会对你造成影响。