2009-08-01 11 views
4

J'utilise postgresql-8.3-603.jdbc4.jar avec jdk 1.6 dans mon application pour effectuer les opérations db. Je reçois parfois les exceptions ci-dessous et le redémarrage permet d'éviter temporairement ces exceptions. Org.postgresql.util.PSQLException: Le nom de la colonne sender_id n'a pas été trouvé dans ce ResultSet.PgSQL Exception: nom de colonne introuvable

à org.postgresql.jdbc2.AbstractJdbc2ResultSet.findColumn (AbstractJdbc2ResultSet.java:2502) à org.postgresql.jdbc2.AbstractJdbc2ResultSet.getString (AbstractJdbc2ResultSet.java:2345) à org.apache.commons.dbcp.DelegatingResultSet.getString (DelegatingResultSet.java:225) à org.apache.commons.dbcp.DelegatingResultSet.getString (DelegatingResultSet.java:225) à com.netcore.bulkrequest.db.FeedDAO.setFeedDetails (FeedDAO.java:142) à com. netcore.bulkrequest.feed.Feed.getInstance (Feed.java:37) à com.netcore.bulkrequest.core.BulkRequestTask. (BulkRequestTask.java:86) à com.netcore.bulkrequest.core.BulkRequestValidate.getBulkRequestTaskObject (BulkRequestValidate .java: 104) à com.netcore.bulkreq uest.core.BulkRequestValidate.run (BulkRequestValidate.java:57) à java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) à java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 908) à java.lang.Thread.run (Thread.java:619)

Voici l'extrait de code:

public class FeedDAO { /** * objet pool de connexions de base de données */ private final 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; 
} 

setFeedDetails public void() throws SOLException {

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(); } 
    } 
} 

}

Quelqu'un peut-il me aider s'il vous plaît trouver le correctif permanent?

Merci, Mani

Répondre

1

La partie clé de l'erreur est « Le nom de la colonne sender_id n'a pas été trouvé dans ce ResultSet » - te première rangée. Alors, que diriez-vous de nous montrer la requête qui cherche une colonne qui n'est tout simplement pas là, et peut-être les résultats de l'exécution interactive de cette requête dans pgsql, les parties pertinentes de votre schéma, etc? Vous ne pouvez certainement pas vous attendre à ce que nous vous aidions à déboguer sans rien voir de plus que la traceback d'exception, avec zéro indice sur votre code et DB!

+0

Salut Alex, Edité la question d'ajouter l'extrait de code .. –

+0

Je ne sais pas comment 'sender_id' peut être moins que peut-être il manque' feed_attributes' manque un champ 'attribute_value', mais même alors je Attendez-vous à une erreur antérieure, pas une sur getString. Hmmm - comment va ton schéma? –

+0

CREATE TABLE feed_attributes ( feed_id entier NOT NULL, attribut entier NON NULL, attribute_value text NOT NULL ); En outre, je suis sûr que sender_id a une certaine valeur lorsqu'il lance cette erreur. Alors que googling pour trouver une solution, il suffit de venir ce lien: http://archives.postgresql.org/pgsql-jdbc/2005-06/msg00086.php mais pas sûr que c'est la cause –

Questions connexes