2013-11-12 4 views
0

Я пытаюсь запустить код, когда я нажимаю кнопку, однако он говорит мне, что мне нужно поймать исключение, но я думал, что уже сделал. Я что-то упускаю? Это кажется довольно простым, но я не могу понять это. Я получаю эту ошибку на линии, 76-83Получение SQLException Ошибка в моей программе Java, не знаю почему

class EmpList { 

private static JFrame frame; 
private static JTextField textField; 

public static void main (String args []) 
    throws SQLException { 

DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver()); 

final String user, pass, query; 

user = "asdf"; 
pass = "asdf"; 




query = "select * from customers"; 

try 
{ 

     Connection conn = DriverManager.getConnection 
     ("jdbc:oracle:thin:@Picard2:1521:itec2",user,pass); 
     final Statement stmt = conn.createStatement(); 
     final ResultSet rset = stmt.executeQuery (query); 


     EmpList window = new EmpList(); 

     frame = new JFrame(); 
     frame.setBounds(100, 100, 630, 470); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 

     final JTextArea textArea = new JTextArea(); 
     textArea.setEditable(false); 
     textArea.setLineWrap(true); 
     textArea.setBounds(10, 179, 594, 241); 
     frame.getContentPane().add(textArea); 

     textField = new JTextField(); 
     textField.setBounds(255, 69, 86, 20); 
     frame.getContentPane().add(textField); 
     textField.setColumns(10); 

     JLabel lblEnterCustomerId = new JLabel("Enter Customer ID (1-6)"); 
     lblEnterCustomerId.setBounds(240, 43, 153, 14); 
     frame.getContentPane().add(lblEnterCustomerId); 

     JButton btnGetInfo = new JButton("Get Info"); 
     btnGetInfo.setBounds(255, 115, 89, 23); 
     frame.getContentPane().add(btnGetInfo); 

     btnGetInfo.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 

       while (rset.next()) 
        { 

         textArea.append((rset.getString("CUSTID") + " - " + rset.getString("CUSTSSN") 
         + " - " + rset.getString("LNAME") + " - " + rset.getString("FNAME") + " - " + 
         rset.getString("STREET") + " - " + rset.getString("CITY") + " - " + rset.getString("STATE") + 
         " - " + rset.getString("ZIP") + " - " + rset.getString("PHONE") + System.getProperty("line.separator") 
         + System.getProperty("line.separator"))); 

        }  


      } 

     }); 


     window.frame.setVisible(true); 


} 

Я думал, что это будет поймать исключение, но я предполагаю, что это не так.

catch (SQLException e) 
{ 
    System.out.println ("Could not load the db"+e); 
} 

} 
} 
+2

StackTrace пожалуйста –

ответ

3

actionPerformed() метод имеет заявления JDBC, которые могут бросить SQLException. Вы должны обработать исключение внутри этого метода. Это не распространяется на блок try, в котором вы создали анонимный внутренний класс.

+0

Это он! Большое вам спасибо, полностью пропустил это. Я просто добавил попытку catch внутри метода actionperformed(), и он работает. Еще раз спасибо! – user2985261

0

Используйте приведенную ниже статью Поймать также то, безусловно, поймать ваше исключение exception.The выброшен не может быть SQLException, следовательно, она не зацепила

catch (Exception e) 
{ 
    System.out.println ("Exception Thrown: "+e); 
} 
0

Ваш код, кажется, поймать исключение правильно. Вы уверены, что у вас действительно есть исключение SQL? Вы также можете добавить это:

catch (Throwable t) { 
    t.printStackTrace(); 
} 

сразу после вашего блока catch. И снова запустите свой код. Это поймает любое исключение, которое будет выбрано и распечатает трассировку стека.

Но я уверен, вы уже видите это на своей консоли, не так ли? Можете ли вы скопировать трассировку стека?

1

Вот соответствующий вопрос:

new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
      while (rset.next()) {...} 
    } 

} 

Это новый класс, и что функция вызывает RSET из в контексте функции, не попробовать поймать блок для контекста объемлющего, и не исключить из функции.

Изменить этот код на то, что уместно, но это поможет вам идти:

new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     try { 
      while (rset.next()) {...} 
     } catch (SQLException ex) { 
      // do something cool 
     } 
    } 
} 
Смежные вопросы