Java 从ResultSet获取MYSQL表名

Java 从ResultSet获取MYSQL表名,java,mysql,Java,Mysql,我有一个SELECT查询,它组合了三个表。我想通过分离MYSQL表将它们添加到Jtable中。我只是想知道如何在结果集中标识表名 resultLoad("SELECT sqNum,RegDate,JobNo,DecName,NoOfLines,EntryType,EntrySubType,EntrySubType2,Amount,Status FROM paysheet WHERE TypeBy='" + cmbStaff.getSelectedItem().toString() + "' A

我有一个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");

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

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

我不知道你的意思,但是:

“我只是想知道如何在结果集中标识表名?”

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

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.
更新:

我刚刚注意到您的查询是多个表的并集。显然,这种方法在那种情况下是行不通的。我认为您最好还是重写查询,使其内容如下:

SELECT 'paysheet' as table_name, ...other columns...
FROM   paysheet
UNION
SELECT 'creditsheet', ...other columns...
...
“我想通过分隔表将它们添加到表中。”

我不知道你的意思,但是:

“我只是想知道如何在结果集中标识表名?”

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

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.
更新:

我刚刚注意到您的查询是多个表的并集。显然,这种方法在那种情况下是行不通的。我认为您最好还是重写查询,使其内容如下:

SELECT 'paysheet' as table_name, ...other columns...
FROM   paysheet
UNION
SELECT 'creditsheet', ...other columns...
...

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

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

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

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

在我看来,您似乎希望
从三个单独的表中选择
数据,并在一个查询中将其作为一个ResultSet返回,然后您希望将结果分离回各个表中

这完全违反直觉


如果希望将结果分开,以便能够单独查看每个表的结果,那么最好执行3个不同的
SELECT
查询。基本上,你所要求的是将三件事结合起来,然后在一次过程中将它们再次分开。不要这样做;如果您首先将它们保持未组合状态,那么将它们分离出来对您来说不会是问题。

在我看来,您似乎希望从三个单独的表中选择数据,并将其作为一个结果集在一个查询中返回,然后将结果分离回各个表中

这完全违反直觉


如果希望将结果分开,以便能够单独查看每个表的结果,那么最好执行3个不同的
SELECT
查询。基本上,你所要求的是将三件事结合起来,然后在一次过程中将它们再次分开。不要这样做;如果您一开始就让它们处于未组合状态,那么将它们分离出来对您来说并不是问题。

只需小心那些没有表的字段。以我的经验,这种方法不可靠。例如,我不确定最新的MySQL驱动程序的状态如何,但就我个人而言,我自己永远不会依赖这种方法。但对我不起作用。因为它repeating@Buck,看看ArMed的问题。正如你所看到的,这是一个工会,而不是工资单、信贷单和其他一些表格。任何JDBC驱动程序都无法正确报告表名,除非ResultSetMetaData对象以某种方式知道Resultset(特别是当前行)的状态。据我所知,JDBC规范根本没有解决这个问题,而这又意味着供应商不受任何特定行为的约束来处理这个问题。简而言之,不可靠。只是要小心那些没有表的字段。根据我的经验,这种方法不可靠。例如,我不确定最新的MySQL驱动程序的状态如何,但就我个人而言,我自己永远不会依赖这种方法。但对我不起作用。因为它repeating@Buck,看看ArMed的问题。正如你所看到的,这是一个工会,而不是工资单、信贷单和其他一些表格。任何JDBC驱动程序都无法正确报告表名,除非ResultSetMetaData对象以某种方式知道Resultset(特别是当前行)的状态。据我所知,JDBC规范根本没有解决这个问题,而这又意味着供应商不受任何特定行为的约束来处理这个问题。简言之,这是不可靠的。