java
  • mysql
  • 2012-07-29 112 views 1 likes 
    1

    我有一個SELECT查詢組合三個表。我想通過分離MYSQL表將它們添加到Jtable中。我只想知道如何識別結果集中的表名稱?從結果集獲取MYSQL表名

    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這樣。但是三個表格包含不同的列。

    回答

    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. 
    

    UPDATE:

    我只注意到你的查詢是在幾個表的聯合。很明顯,這種方法在這種情況下不起作用。我覺得你最好的選擇仍然是重寫查詢,以便它讀取:

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

    從你的結果集,你可以得到的ResultSetMetaData。它看起來像這樣:

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

    只要注意沒有表格的字段。 – Vatev 2012-07-29 17:54:21

    +0

    以我的經驗,這種方法不可靠。例如http://fixunix.com/weblogic/223501-resultsetmetadata-gettablename-int-column-dont-work.html我不確定最新的MySQL驅動程序的狀態是什麼,但是我個人決不會依賴這個方法我自己。 – 2012-07-29 17:57:14

    +0

    是的,我試過。但是不對我工作。因爲它重複 – ArMEd 2012-07-29 18:06:48

    0

    像你想從三個單獨的表SELECT數據,並把它在一個查詢返回一個結果在我看來,那你想要的結果出來分開回成單獨的表。

    這完全違反了直覺。

    如果您希望將結果分隔開以便您能夠分別查看每個表的結果,那麼最好的方法是執行3個不同的SELECT查詢。基本上,你要求它合併3件事物,然後再一次將它們分開。不要這樣做;如果你把它們放在第一位,把它們分開就不會成爲你的問題。

    相關問題