我有一个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中。但是这三个表包含不同的列。
答案 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件事,然后在一次通过中再次分开它们。不要这样做;如果你把它们首先放在一起,将它们分开就不会对你造成影响。