2009-08-01 13 views
4

DB操作を行うために私のアプリケーションでjdk 1.6とpostgresql-8.3-603.jdbc4.jarを使用しています。私は時々以下の例外を受け取り、この例外を一時的に回避するのに役立ちます。PgSQL例外:列名が見つかりません

org.postgresql.util.PSQLException:列名sender_idがこのResultSetに見つかりませんでした。 org.apache.commons.dbcp.DelegatingResultSet.getStringでorg.postgresql.jdbc2.AbstractJdbc2ResultSet.getString(AbstractJdbc2ResultSet.java:2345) でorg.postgresql.jdbc2.AbstractJdbc2ResultSet.findColumn(AbstractJdbc2ResultSet.java:2502) (AT org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:225)の com.netcore.bulkrequest.db.FeedDAO.setFeedDetails(FeedDAO.java:142)の の のcom。 com.netcore.bulkrequest.core.BulkRequestTaskでnetcore.bulkrequest.feed.Feed.getInstance(Feed.java:37) 。(BulkRequestTask.java:86) com.netcore.bulkrequest.core.BulkRequestValidate.getBulkRequestTaskObjectで(BulkRequestValidate .java:104) at com.netcore.bulkreq (ThreadPoolExecutor。ThreadPoolExecutor。)。ジャワ: /** * データベース接続プール・オブジェクト *

パブリッククラスFeedDAO {:908) java.lang.Thread.run(Thread.java:619で)ここ

は、コードスニペットであります/ プライベート最終DBContext dbc;

private final Feed feed; 

public static final String SENDER_ID_ATTRIBUTE = "sender_id"; 

/** 
* Constructor 
* 
* @param dbc 
* @param feed 
*/ 
public FeedDAO(DBContext dbc, Feed feed) { 
    this.dbc = dbc; 
    this.feed = feed; 
} 

ます。public void setFeedDetails()のSQLException {

String feedDetailsQuery = "SELECT a.priority, b.keyword, b.welcome " + 
      " FROM feed AS a, pub_feed_info AS b " + 
      " WHERE a.resource_id = b.resource_id AND b.resource_id = ?"; 

    String senderIdQuery = "SELECT b.attribute_value AS " + 
      SENDER_ID_ATTRIBUTE + " FROM " + 
      "attribute_master AS a, feed_attributes AS b " + 
      "WHERE a.attribute_id = b.attribute " + 
      " AND a.attribute_name='" + SENDER_ID_ATTRIBUTE + "' " + 
      " AND feed_id = ?"; 

    Connection con = null; 
    PreparedStatement fdStmt = null; 
    PreparedStatement siStmt = null; 

    try { 
     con = dbc.getConnection(); 

     //Get the feed details 
     fdStmt = dbc.getPreparedStatement(con, feedDetailsQuery); 

     fdStmt.setInt(1, this.feed.getFeedId()); 
     fdStmt.execute(); 

     ResultSet fdResults = fdStmt.getResultSet(); 

     while (fdResults.next()) { 
      String keyword = fdResults.getString("keyword"); 
      String welcomeMsg = fdResults.getString("welcome"); 
      int priority = fdResults.getInt("priority"); 

      if(null != keyword) { 
       this.feed.setKeyword(keyword); 
      } else { 
       this.feed.setKeyword(String.valueOf(this.feed.getFeedId())); 
      } 
      this.feed.setWelcomeMsg(welcomeMsg); 
      this.feed.setPriority(priority); 
     } 

     //Get the sender id 
     siStmt = dbc.getPreparedStatement(con, senderIdQuery); 
     siStmt.setInt(1, this.feed.getFeedId()); 

     if(siStmt.execute()) { 
      ResultSet siResults = siStmt.getResultSet(); 

      while(siResults.next()) { 
       String senderId = siResults.getString(SENDER_ID_ATTRIBUTE); 

       this.feed.setSenderId(senderId); 
      } 

     } else { 
      this.feed.setSenderId(Feed.DEFAULT_SENDER_ID); 
     } 

    } catch (SQLException ex) { 
     throw ex; 
    } finally { 
     if (fdStmt != null) { fdStmt.close(); } 
     if (siStmt != null) { siStmt.close(); } 
     if (con != null) { con.close(); } 
    } 
} 

}

は誰でも永久修正を見つけるために私を助けてくださいことはできますか?投げますかTE非常に最初の行 -

おかげで、

マニ

答えて

1

は、エラーの重要な部分は、「列名SENDER_IDがこのResultSetに見つかりませんでした」です。では、そこにない列を探しているクエリを表示する方法と、pgsqlで対話的にクエリを実行した結果、スキーマの関連部分などについてはどうでしょうか?確かにあなたは、あなたのコードとDBについての手がかりをゼロにして、例外のトレースバック以上のものを見ることなく、あなたがデバッグを手助けすることを期待することはできません!コードスニペットを追加するための質問を編集

+0

こんにちは、アレックス、 ... –

+0

私は 'sender_id'は多分' feed_attributes'がフィールド 'attribute_value'が不足していない限り、そこに欠けていることができるかわからないんだけど、でも、私は思いますgetStringのエラーではなく、以前のエラーを予期します。うーん、あなたのスキーマはどうですか? –

+0

CREATE TABLE feed_attributes( feed_id整数NOT NULL、 属性整数NOT NULL、 attribute_valueテキストNOT NULL ); また、このエラーが発生したときにsender_idに値があることを確認しています。解決策を見つけるためにグーグルで、ちょうどこのリンクに来る:http://archives.postgresql.org/pgsql-jdbc/2005-06/msg00086.phpしかし、これが原因であることがわからない –

関連する問題