-1

我有一个PolaczZBaza有 2 种方法的类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 这是一个带有设置的框架。如果我输入正确的数据一切都很好

4

1 回答 1

1

Please post full PolaczZBaza class. Anyway, statement may be null. In this case, we are creating this construction:

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..}
}

it is null pointer safe and catching exception makes sure that all resources will be closed anyway.

于 2014-01-02T23:15:55.847 回答