2014-12-03 3 views
1

у меня есть ошибки, когда я пытаюсь запустить этот кодjava.sql.SQLException: Операция не допускается после ResultSet закрыта пробами

я нахожусь попробовать много времени я пытаюсь сделать задержку 3 секунды, прежде чем читать дальше значение от daabase я есть ошибка java.sql.SQLException: Операция не допускается после ResultSet закрыто

, что вы думаете об этой ошибке, потому что я сейчас не об этой ошибке

и это мой код, пожалуйста, помогите мне

try { 
     Connection conn = null; 
     Statement st = null; 
     ResultSet rs = null; 
     String dbUrl = "jdbc:mysql://*******/jointdb"; 
     String dbUsr = "****"; 
     String dbPass = "*****"; 
     String sql = "select * from eridb"; 
     Class.forName("com.mysql.jdbc.Driver"); 
     conn = DriverManager.getConnection(dbUrl, dbUsr, dbPass); 
     st = conn.createStatement(); 
     rs = st.executeQuery(sql); 
     while (rs.next()) { 
     SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       String value = rs.getString("id"); 
       jTextArea1.setText(value); 
       Thread.sleep(3000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } catch (SQLException ex) { 
       Logger.getLogger(KK.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    }); 
     } 
    } catch (Exception e) { } 
    finally{ 
     try{ 
      if (rs != null) 
      rs.close(); 
      if (st != null) 
      st.close(); 
      if (conn != null) 
      conn.close(); 
     }catch(SQLException e){} 
    } 

ответ

0

Вы получаете доступ к ResultSet в другой теме. К тому времени, когда это называется, исходная нить закончила свой блок try, переместилась на finally и закрыла ResultSet.

+0

, что вы имеете в виду, пожалуйста, дайте мне больше hinit –

+0

я положил, наконец, блок после первой попытки в SwingUtilities.invokeLater нить –

0

Похоже, что ваша тема представляет собой отдельный процесс в вашем основном коде. Ваш основной код будет работать параллельно с вашим потоком.

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

thread1.join(); 
0

Согласно определению, SwingUtilities.invokeLater будет работать асинхронно после всех AWT события обрабатываются (документация here).

Таким образом, наиболее вероятно, что достигнут блок finally, перед кодом Runnable внутри SwingUtilities.invokeLater.

Я не вижу необходимости выполнять обработку записи асинхронно, я бы рекомендовал вам прочитать и заполнить Jtextarea, не отсоединяя его от текущего потока.

+0

я поставил, наконец, блок после первой попытки в SwingUtilities.invokeLater нить –

+0

Что я предлагаю, является то, что вы должен перемещать код внутри «new Runnable() {}» и перемещать его внутри блока try и удалять «invokeLater». Кстати, есть ли какая-то особая причина для этого? –

Смежные вопросы