我有一个班级PolaczZBaza
,有两种方法 -
polacz()
- 用sql数据库打开连接
rozlacz()
关闭此数据库
有一个JToggleButton
用于连接此数据库。
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
try {
PolaczZBaza.polacz();
this.setText("Rozłącz z bazą danych");
MenuGorne.ustawienia.setEnabled(false);
PanelGlowny.ustawienia.setEnabled(false);
PanelGlowny.wykonaj.setEnabled(true);
PanelGlowny.importXML.setEnabled(true);
MenuGorne.importXML.setEnabled(false);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Błąd łączenia z bazą danych2");
}
} else {
try {
PolaczZBaza.rozlacz();
this.setText("Połącz z bazą danych");
MenuGorne.ustawienia.setEnabled(true);
PanelGlowny.ustawienia.setEnabled(true);
PanelGlowny.wykonaj.setEnabled(false);
PanelGlowny.importXML.setEnabled(false);
MenuGorne.importXML.setEnabled(false);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Błąd podczas próby rozłączenia z bazą danych");
}
}
}
当无法建立连接时,会有一条消息,但同时方法rozlacz()
会抛出NullPointerException
。我认为这是因为他试图关闭未开封
连接,但我不知道为什么会发生这种情况,因为不应该使用方法rozlacz()
public static void rozlacz() throws SQLException {
statement.close();
}
感谢您的帮助 编辑: 公共课PolaczZBaza {
public static Connection connection;
public static Statement statement;
public static void polacz() throws SQLException {
connection = DriverManager.getConnection("jdbc:firebirdsql://"
+ PanelGlowny.ustawieniaBazy.getSerwer() + "/"
+ PanelGlowny.ustawieniaBazy.getSciezka() + "\"",
PanelGlowny.ustawieniaBazy.getLogin(),
PanelGlowny.ustawieniaBazy.getHaslo());
statement = connection.createStatement();
}
public static void rozlacz() throws SQLException {
statement.close();
}
PanelGlowny.ustawieniaBazy这是一个有设置的框架。如果我输入正确的数据,一切都很好
答案 0 :(得分:1)
请发布完整的PolaczZBaza课程。无论如何,声明可能为空。在这种情况下,我们正在创建这种结构:
void closeResources(PreparedStatement statement, ResultSet resultSet, Connection connection) {
if(statement != null) try { statement.close(); } catch (SQLException) { //log..}
if(resultSet!= null) try { resultSet.close(); } catch (SQLException) { //log..}
if(connection!= null) try { connection.close(); } catch (SQLException) { //log..}
}
它是空指针安全和捕获异常确保所有资源都将被关闭。