简体   繁体   English

java jdbc中的连接异常

[英]Connection exception in java jdbc

This is one of constructors of class.这是类的构造函数之一。 New object create new record in database.新对象在数据库中创建新记录。 When I create this object "by hand" in source code, everything is fine.当我在源代码中“手动”创建这个对象时,一切都很好。 But when I put declaration of creation into actionlistener of a button, compiler returns sql exception.但是当我将创建声明放入按钮的 actionlistener 时,编译器返回 sql 异常。

public Pacjent()
    {
        try
        {
            Connection conn = DataBase.Connect();
            Statement stat = conn.createStatement();
            String addRecord = "INSERT INTO records VALUES (12365, 'Bond', 'James', 'M', '12.41.1953r', 'Londyn', 'none');";
            stat.executeUpdate(addRecord);        
    }
    catch(SQLException e)
    {
        e.printStackTrace();
    }    

}

Exception that I get is我得到的例外是

org.postgresql.util.PSQLException: This connection has been closed. org.postgresql.util.PSQLException:此连接已关闭。 at org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:714) at org.postgresql.jdbc3.AbstractJdbc3Connection.createStatement(AbstractJdbc3Connection.java:230) at org.postgresql.jdbc2.AbstractJdbc2Connection.createStatement(AbstractJdbc2Connection.java:191) at klasySilnika.Pacjent.(Pacjent.java:61) at klasyInterfejsu.NowaKarta$1.actionPerformed(NowaKarta.java:155) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6504) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6269) at java.awt.Con在 org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:714) 在 org.postgresql.jdbc3.AbstractJdbc3Connection.createStatement(AbstractJdbc3Connection.java:230) 在 org.postgresql.jdbc1dbc2. ) 在 klasySilnika.Pacjent.(Pacjent.java:61) 在 klasyInterfejsu.NowaKarta$1.actionPerformed(NowaKarta.java:155) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 在 javatract.swing$HandlerAbs .actionPerformed(AbstractButton.java:2341) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 在 javax.swing.plaf.basic.BasicButtonListener。 mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6504) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java) :6269) 在 java.awt.Con tainer.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4860) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2713) at java.awt.Component.dispatchEvent(Component.java:4686) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) 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.security.Protectio tainer.processEvent(Container.java:2229) 在 java.awt.Component.dispatchEventImpl(Component.java:4860) 在 java.awt.Container.dispatchEventImpl(Container.java:2287) 在 java.awt.Component.dispatchEvent(Component) .java:4686) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)在 java.awt.Container.dispatchEventImpl(Container.java:2273) 在 java.awt.Window.dispatchEventImpl(Window.java:2713) 在 java.awt.Component.dispatchEvent(Component.java:4686) 在 java.awt。 EventQueue.dispatchEventImpl(EventQueue.java:707) 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.security.Protectio nDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:680) at java.awt.EventQueue$4.run(EventQueue.java:678) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) 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) nDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 在 java.awt.EventQueue$4.run(EventQueue.java:680) 在 java.awt.EventQueue$4.run(EventQueue.java:678) 在 java.security.AccessController。 doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) ) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) .EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

and this is actionlistener:这是动作监听器:

saveButton.addActionListener
        (
            new ActionListener() 
            {
                @Override
                public void actionPerformed(ActionEvent event) 
                {
                    Pacjent nowy = new Pacjent();
                }
            }
        );

Database.Connect method: Database.Connect 方法:

public class DataBase 
{
    public static Connection Connect()
    {
        return CONNECTION;
    }        

    private static Connection CONNECTION = CreateConnection();

    private static Connection CreateConnection() 
    {
        try 
        {
            Class.forName("org.postgresql.Driver");

            Properties props = new Properties();
            FileInputStream in = new FileInputStream("D:\\projekty\\Arch\\src\\klasySilnika\\bazadanych.properties");
            props.load(in);
            in.close();

            String drivers = props.getProperty("jdbc.drivers");
            if(drivers != null) System.setProperty("jdbc.drivers", drivers);
            String url = props.getProperty("jdbc.url");
            String username = props.getProperty("jdbc.username");
            String password = props.getProperty("jdbc.password");

            return DriverManager.getConnection(url, username,password);
        }
        catch (ClassNotFoundException e) 
        {
            System.out.println("NO JDBC driver");
        return null;
    }
        catch(IOException e)
        {
            System.out.println("Where is properties file?");
            return null;
        } 
        catch(SQLException e)
        {
            System.out.println("error: adress, user, password?");
            return null;
        }
        finally
        {
           // ...   
        }
    }
}

也许连接实例在其他地方关闭了,因为你的连接是静态的,整个应用程序只有一个连接实例,所以你可以将连接更改为多实例或通过数据源管理,例如:c3p0,dhcp

public Pacjent()
{
    try
    {
        Connection conn = DataBase.**CreateConnection**();
        Statement stat = conn.createStatement();
        String addRecord = "INSERT INTO records VALUES (12365, 'Bond', 'James', 'M', '12.41.1953r', 'Londyn', 'none');";
        stat.executeUpdate(addRecord);        
}
catch(SQLException e)
{
    e.printStackTrace();
}    

} }

You can Change your Method to CreateConnection您可以将方法更改为 CreateConnection

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM