2016-09-09 233 views
2

我正在開發一個狂放地部署的java web服務。它連接到一個postgresql數據庫。 在這個數據庫中,我有一個名爲xx_activity的表。其中有一個名爲「id」的列,它也是主鍵。 下面是用於創建表的查詢:org.postgresql.util.PSQLException:錯誤:列「id」不存在 - Java Web服務

CREATE TABLE xx_activity 
(
    id serial NOT NULL, 
    baseitemid integer 
); 

連接到該表中,我使用下面的java代碼:

conn = postgresVoyateDBConnection(); 
      query = conn.prepareStatement("select id, baseitemid" + 
              "from xx_activity " + 
              "where \"id\" = ? "); 

      query.setInt(1, id); 
      ResultSet rs = query.executeQuery(); 

然而,當我打電話包括該代碼的方法中,我收到一個錯誤:

org.postgresql.util.PSQLException: ERROR: column "id" does not exist

Position: 8

這很混亂,因爲我當然有這個專欄。我按this answer添加了轉義字符,但它沒有解決問題。

還要注意的是查詢,而where子句,如:

conn = postgresVoyateDBConnection(); 
     query = conn.prepareStatement("select id, baseitemid " + 
             "from xx_activity"); 

     ResultSet rs = query.executeQuery(); 

工作完美。

我也嘗試過不使用轉義字符,但它給出了相同的錯誤。我還檢查了pgadmin,列名中沒有尾部空格,也沒有涉及任何大寫字母(在這種情況下,其他選擇查詢不應該有效?)。

這怎麼解決?

+1

使用pgAdmin或其他工具連接到您的數據庫使用相同的憑據,你在你的應用程序中使用。執行'select * from xx_activity'結果中是否有id列?檢查你是否有兩個'xx_activity'表 - 一個在公共模式中,另一個在用戶模式中。 – 112g

+0

@ 112g只有1個模式,即公共模式。我嘗試了一個選擇,它的工作,即使從Java代碼。另外,即使是where子句從pgadmin開始工作,想知道爲什麼它不能從代碼中工作? –

回答

2

修正了這個問題,這個問題是一個缺失的空間。查詢的第一行後,需要有作爲初級講座的空間:

query = conn.prepareStatement("select id, baseitemid " + 
              "from xx_activity " + 
              "where \"id\" = ? "); 

編輯:逃避不需要id charactors;所以最終的答案應該是:

query = conn.prepareStatement("select id, baseitemid " + 
               "from xx_activity " + 
               "where id = ? "); 
+3

爲什麼你把'id'放在引號中?這不是必需的。 – Kayaman

+0

指出,編輯答案。感謝您指出了這一點! –