[英]Connection exception in java jdbc
這是類的構造函數之一。 新對象在數據庫中創建新記錄。 當我在源代碼中“手動”創建這個對象時,一切都很好。 但是當我將創建聲明放入按鈕的 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();
}
}
我得到的例外是
org.postgresql.util.PSQLException:此連接已關閉。 在 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) 在 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) 在 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)
這是動作監聽器:
saveButton.addActionListener
(
new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
Pacjent nowy = new Pacjent();
}
}
);
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();
}
}
您可以將方法更改為 CreateConnection
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.