Исключение PgSQL: имя столбца не найдено - PullRequest
4 голосов
/ 01 августа 2009

Я использую postgresql-8.3-603.jdbc4.jar с jdk 1.6 в своем приложении для выполнения операций с БД. Иногда я получаю следующие исключения, а перезапуск помогает временно избежать этих исключений.

org.postgresql.util.PSQLException: имя столбца sender_id не найдено в этом ResultSet. at org.postgresql.jdbc2.AbstractJdbc2ResultSet.findColumn (AbstractJdbc2ResultSet.java:2502) at 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.bulkrequest.core.BulkRequestValidate.run (BulkRequestValidate.java:57) в java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) at java.lang.Thread.run (Thread.java:619)

Вот фрагмент кода:

открытый класс FeedDAO { / ** * Объект пула соединений с базой данных * / закрытый финал 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(); }
    }
}

}

Может кто-нибудь помочь мне найти постоянное исправление?

Спасибо, Mani

1 Ответ

1 голос
/ 01 августа 2009

Ключевая часть ошибки: «Имя столбца sender_id не найдено в этом ResultSet», т. Е. Самая первая строка. Итак, как насчет того, чтобы показать нам запрос, который ищет столбец, которого просто нет, и, возможно, результаты интерактивного выполнения этого запроса в pgsql, соответствующие части вашей схемы и т. Д.? Конечно, вы не можете ожидать, что мы поможем вам выполнить отладку, не увидев ничего, кроме трассировки исключений, с нулевыми подсказками о вашем коде и БД!

...