2014-04-03 64 views
-1

所以我的sql很生鏽。爲JDBC項目選擇多個表格

我有一個項目,我的工作,用Java編寫的,用於連接到Oracle數據庫的大學,我有6張桌子,產品,數碼產品,CD,藝術家,歌曲和song_artist

我想從我的Java程序中同時添加,更新和刪除這些表。 所以我去加入他們,我真的不是起訴,如果我想這樣做的方式是可能的或是最好的方法,下面是我的一些代碼的嘗試, 記住,表結構可以不會改變。

public ResultSet getCD() { 
    try { 
     String queryString = "SELECT * FROM PRODUCT p, DIGITAL_PRODUCT dp, CD c, SONG s, ARTIST a, CD_ARTIST ca" 
       + "WHERE p.PROD_ID = dp.PROD_ID AND dp.DIG_ID = c.DIG_ID AND c.CD_ID = ca.CD_ID " 
       + "AND ca.ARTIST_ID = a.ARTIST_ID AND ca.CD_ID = s.CD_ID" 
       + "GROUP BY PROD_ID "; 

     stmt = conn.createStatement(); 
     rset = stmt.executeQuery(queryString); 


    } catch (Exception e) { 
     System.out.println(e); 
    } 
    return rset; 
} 

目前我得到的java.sql.SQLSyntaxErrorException:ORA-00933:SQL命令未正確結束,我猜這可能是與我的組通過做。

任何幫助或建議,真的很感激。

+0

錯誤是因爲如果我沒有弄錯,你必須'GROUP BY p.PROD_ID'或'dp.PROD_ID'。 –

+0

將其更改爲p.PROD_ID,結果仍然相同 – Johntk

+0

您還缺少空格(例如's.CD_ID'後面)。請注意,您使用的連接語法已被視爲棄用。你應該真的使用顯式連接。 –

回答

1

一個問題與您查詢的是,你不能用group by這種方式一起使用select *。如果選中的列未出現在group by子句中,則必須在列表中應用像max這樣的聚合函數。利奧當然是對的。

+0

是的,我認爲這給了我一些工作,我刪除了小組,並沒有更多的錯誤,我不確定我是否需要該小組,所以我現在將更多地使用它,看看我如何繼續。感謝您的輸入。 – Johntk

3

查詢就是缺少「WHERE」前添加一個空格和「本集團」

+0

它可能仍然不起作用。查詢有選擇「*」和組由只有「PROD_ID」 – hellboy

+0

好了,所以我把空間,現在的錯誤已經改變爲:ORA-00979:不是一個GROUP BY表達式 – Johntk

+0

true。因爲現在,你需要一些聚合函數來對你的結果進行分組。使用group子句,您希望從查詢中得到什麼? (所以我們可以幫你) – Leo