Почему мое приложение все еще бежит за закрытием главного окна?

Я не уверен, что вы хотите отправить два оператора SELECT в один запрос, потому что вы не сможете получить доступ к ним ResultSet s. База данных может возвращать только последний набор результатов.

Несколько ResultSets

Однако, если вы вызываете хранимую процедуру, которая, как вы знаете, может возвращать несколько наборов результатов, что-то вроде этого будет работать

CallableStatement stmt = con.prepareCall(...);
try {
...

boolean results = stmt.execute();

while (results) {
    ResultSet rs = stmt.getResultSet();
    try {
    while (rs.next()) {
        // read the data
    }
    } finally {
        try { rs.close(); } catch (Throwable ignore) {}
    }

    // are there anymore result sets?
    results = stmt.getMoreResults();
}
} finally {
    try { stmt.close(); } catch (Throwable ignore) {}
}

Несколько операторов SQL

Если вы говорите о нескольких операторах SQL и только одном SELECT, ваша база данных должна поддерживать один String SQL. Например, я использовал что-то вроде этого в Sybase

StringBuffer sql = new StringBuffer( "SET rowcount 100" );
sql.append( " SELECT * FROM tbl_books ..." );
sql.append( " SET rowcount 0" );

stmt = conn.prepareStatement( sql.toString() );

Это будет зависеть от синтаксиса, поддерживаемого вашей базой данных. В этом примере обратите внимание на добавление spaces, дополняющее высказывания, чтобы между элементами было пустое пространство.

14
задан Michael Myers 30 October 2008 в 20:37
поделиться

3 ответа

Необходимо звонить setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); в JFrame.

Пример кода:

public static void main(String[] args) {
    Runnable guiCreator = new Runnable() {
        public void run() {
            JFrame fenster = new JFrame("Hallo Welt mit Swing");
            fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            fenster.setVisible(true);
        }
    };
    SwingUtilities.invokeLater(guiCreator);
}
20
ответ дан 1 December 2019 в 10:19
поделиться

Существует различие между окном приложения и самим приложением... Выполнения окна в его собственном потоке и окончание main() не закончат приложение, если другие потоки будут все еще активны. При закрытии окна необходимо также удостовериться, что закрыли приложение, возможно путем вызова System.exit(0);

Yuval =8-)

3
ответ дан 1 December 2019 в 10:19
поделиться

Необходимо расположить кадр, вызвав расположить метод в слушателе окна или с помощью setDefaultCloseOperation. Для аргумента последнего можно использовать две опции:

DISPOSE_ON_CLOSE или EXIT_ON_CLOSE.

DISPOSE_ON_CLOSE только располагают ресурсы кадра.

EXIT_ON_CLOSE располагает ресурсы кадра и затем вызывает System.exit.

нет никакой реальной разницы между двумя, если у Вас нет потоков демона. Я предпочитаю использовать DISPOSE_ON_CLOSE, потому что этот способ, которым я могу заметить, забыл ли я завершать поток, потому что JVM остановится, если больше нет выполнения потоков. Это - также причина, закрывающая Кадр без расположения, не завершит приложение, так как Swing создает поток для обработки событий, который завершается только, когда располагают, вызывается.

3
ответ дан 1 December 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: