2012-07-29 3 views
1

세 개의 테이블을 결합하는 SELECT 쿼리가 있습니다. MYSQL 테이블을 분리하여 Jtable에 추가하려고합니다. Resultset의 테이블 이름을 어떻게 식별 할 수 있는지 알고 싶습니다.ResultSet에서 MYSQL 테이블 이름 가져 오기

내가 날짜를 정렬하여 다음과 같이 Jtable 설명에 추가 할
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); 
    } 
} 

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"); 
. 그러나 세 개의 테이블에는 다른 열이 있습니다.

답변

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. 

는 UPDATE :

난 그냥 쿼리를 발견

는 여러 테이블에 걸쳐 UNION이다. 분명히이 방법은이 경우 작동하지 않습니다. 나는 당신의 가장 좋은 방법은 그것을 읽도록 쿼리를 다시 작성 여전히 생각 : 당신의 결과 세트에서

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

, 당신은 ResultSetMetaData를 얻을 수 있습니다. 그것은 다음과 같습니다 : 당신은 세 개의 테이블에서 SELECT 데이터를 원하고 그것을 하나 개의 ResultSet으로 한 쿼리에서 반환이 같은

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

테이블이없는 입력란에주의하십시오. – Vatev

+0

제 경험상이 방법은 신뢰할 수 없습니다. 예를 들어 http://fixunix.com/weblogic/223501-resultsetmetadata-gettablename-int-column-dont-work.html을보십시오. 최신 MySQL 드라이버가 어떤 상태인지 확신 할 수 없지만, 개인적으로 나는 이것에 의존하지 않을 것입니다. 방법. –

+0

예, 시도했습니다. 하지만 나에게 일하지 않아. – ArMEd

0

그것은 나에게 보인다 다음 각 테이블에 다시 밖으로 결과를 구분합니다.

이것은 완전히 반 직관적입니다.

각 테이블의 결과를 개별적으로 볼 수 있도록 결과를 분리하려면 3 가지 다른 SELECT 쿼리를 수행하는 것이 가장 좋습니다. 기본적으로 3 가지를 결합한 다음 한 번에 다시 분리해야합니다. 이것을하지 마십시오. 첫 번째 장소에서 그들을 결합하지 않은 채로두면 다시 분리하면 문제가되지 않습니다.