2016-09-09 54 views
2

私は荒々しく展開されているJava Webサービスを開発しています。これはpostgresqlデータベースに接続されています。 このデータベースには、xx_activityというテーブルがあります。その中には "id"という列があり、これも主キーです。ここで がテーブルを作成するために使用されるクエリです:私はこのコードを含んでメソッドを呼び出すとき、しかし、org.postgresql.util.PSQLException:エラー:列 "id"が存在しません - Java Webサービス

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

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

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

このテーブルに接続するには、私は、次のJavaコードを使用します私はエラーが発生します:

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

Position: 8

私は確かにこの列を持っているので、これは混乱しています。 this answerとしてエスケープ文字を追加しましたが、問題は解決しませんでした。完全

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

     ResultSet rs = query.executeQuery(); 

作品:

はまたのようなwhere句のないクエリ、ということに注意してください。

エスケープ文字を使用せずに試してみましたが、同じエラーが発生します。私もpgadminをチェックし、カラム名に後続のスペースはなく、大文字も含まれていません(この場合、他の選択クエリは機能していないはずです)。

どのようにこれを修正できますか?

+1

pgAdminなどのツールを使用して、アプリケーションで使用するのと同じ資格情報を使用してデータベースに接続します。 'select * from xx_activity'を実行します。結果にid列はありますか? 2つの 'xx_activity'テーブルがあるかどうかを確認します.1つは公開スキーマ、もう1つはユーザスキーマです。 – 112g

+0

@ 112g公開スキーマが1つだけです。私は選択を試み、それは、Javaコードからも、動作します。また、where節もpgadminから動作し、なぜコードからはうまくいかないのだろうか? –

答えて

2

この問題を解決するには、スペースが不足していました。

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

EDIT:クエリの最初の行の後、belowsのようにスペースがある必要があるidのために必要ではないキャラを逃れます。

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

なぜあなたは引用符で 'id'を入れますか?それは必須ではありません。 – Kayaman

+0

は、解答を編集しました。それを指摘してくれてありがとう! –

関連する問題