PSQLException: этот ResultSet закрыт Postgresql db

Я разрабатываю код NASA World Wind. Основная идея состоит в том, чтобы создать карту холста и создать соединение с пространственной таблицей (файл формы) в базе данных PostgreSQL и разместить метку на карте. Я вызываю набор результатов и выполняю запрос. Я знаю, что набор результатов должен быть помещен в таблицу для использования, поскольку набор становится нулевым после закрытия соединения. Я пробовал это, но у него совершенно другая ошибка.

// CODE BLOCK //
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public Main()
    {
        Connection connection = null;
        Statement statement = null;
        ResultSet rs = null;
        String url = "jdbc:postgresql://localhost/<db name>";
        String user = "postgres";
        String password = "postgres";

        String query = "SELECT gid, state_code, state_name, district_c, district_n, sub_distri, town_code, town_name, ST_X(geom), ST_Y(geom) FROM indiacity";

            try
            {
                connection = DriverManager.getConnection(url, user, password);
                System.out.println(" DATABASE CONNECTION SUCCESSFUL. ");
                statement = connection.createStatement();
                rs = statement.executeQuery(query);
                System.out.println(rs);
            }
            catch (SQLException ex)
            {
                ex.printStackTrace();
            }
            finally
            {
                try
                {
                    if (rs != null)
                    {
                        rs.close();
                    }
                    if (statement != null)
                    {
                        statement.close();
                    }
                    if (connection != null)
                    {
                        connection.close();
                    }
                }
                catch (SQLException ex)
                {
                    ex.printStackTrace();
                }
            }
world = new WorldWindowGLCanvas();
        world.setPreferredSize(new java.awt.Dimension(1000, 800));
        this.getContentPane().add(world, BorderLayout.CENTER);
        world.setModel(new BasicModel());
        final RenderableLayer layer = new RenderableLayer();
        PointPlacemark placemark = null;
        try
        {
            placemark = new PointPlacemark(Position.fromDegrees(rs.getDouble(10), rs.getDouble(10), 10));
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        // pp = new PointPlacemark(Position.fromDegrees(30, -103.5, 2e3));
        placemark.setLabelText("PLACEMARK");
        placemark.setValue(AVKey.DISPLAY_NAME, "All defaults");
        layer.addRenderable(placemark);
        propertiesLayer = new RenderableLayer();
        LayerList layers = world.getModel().getLayers();
        layers.add(propertiesLayer);
        layers.add(layer);

 public static void main (String [] args)
    {
        // TODO Auto-generated method stub
     java.awt.EventQueue.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                JFrame frame = new Main();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setName("POSTGRESQL DB EXAMPLE");
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}

// БЛОК ОШИБКИ //

 DATABASE CONNECTION SUCCESSFUL.

    org.postgresql.jdbc.PgResultSet@16904c4
    org.postgresql.util.PSQLException: This ResultSet is closed.
        at org.postgresql.jdbc.PgResultSet.checkClosed(PgResultSet.java:2737)
        at org.postgresql.jdbc.PgResultSet.checkResultSet(PgResultSet.java:2765)
        at org.postgresql.jdbc.PgResultSet.getDouble(PgResultSet.java:2303)
        at avr_package.Main.<init>(Main.java:101)
        at avr_package.Main$1.run(Main.java:184)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
        at java.awt.EventQueue.access$000(EventQueue.java:101)
        at java.awt.EventQueue$3.run(EventQueue.java:666)
        at java.awt.EventQueue$3.run(EventQueue.java:664)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at avr_package.Main.<init>(Main.java:108)
        at avr_package.Main$1.run(Main.java:184)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
        at java.awt.EventQueue.access$000(EventQueue.java:101)
        at java.awt.EventQueue$3.run(EventQueue.java:666)
        at java.awt.EventQueue$3.run(EventQueue.java:664)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    Mar 08, 2018 2:38:24 PM gov.nasa.worldwind.util.SessionCacheRetrievalPostProcessor run
    SEVERE: Retrieval returned no content for https://worldwind20.arc.nasa.gov/mapcache?EXCEPTIONS=application/vnd.ogc.se_xml&REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.3.0

    Process finished with exit code 0

Вся помощь приветствуется.


person ANDY    schedule 08.03.2018    source источник
comment
Действительно, вам нужно где-то сохранить значения, прежде чем вы закроете файл ResultSet. Не могли бы вы опубликовать свою другую попытку вместе с полученной ошибкой?   -  person Arnaud    schedule 08.03.2018
comment
Ваш блок finally закроет ResultSet, но вы получите к нему доступ после блока finally, так что да, этот ResultSet будет закрыт после его использования.   -  person a_horse_with_no_name    schedule 08.03.2018
comment
Последующий NPE происходит потому, что ваше предыдущее восстановление из SQLException оставило placemark как null. Ваш обработчик исключений для SQLException не работает.   -  person Stephen C    schedule 08.03.2018