如果发生异常,请转到Try块

时间:2013-12-22 03:26:17

标签: java try-catch

我在Java中使用try catch有问题

 private void Bağlan_ButonActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
       String user=Uname_Textfield.getText();
       String pwd= new String (Password_PasswordField.getPassword());
    try {  
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        String connectionUrl = "jdbc:sqlserver://192.168.131.10;" + "databaseName=Digitalk;" + "user=" + user + ";" + "password=" + pwd + ";";      
        Connection con = DriverManager.getConnection(connectionUrl);
        } 
    catch (SQLException e) {
            JOptionPane.showMessageDialog(this, "Kullanıcı Adı veya Şifre Yanlış!");   
        } 
    catch (ClassNotFoundException cE) {
            System.out.println("Class Not Found Exception: "+ cE.toString());
        }
    new ProgramPenceresi().setVisible(true);
    dispose();
    }

我在loginscreen.java类中有上面的Button操作代码。如果发生sqlexception,我已经捕获它并向用户显示警告消息。当用户单击“确定”时,ProgramPenceresi.java将进入屏幕。

我想如果出现SqlExceptions以显示消息,并且当用户单击OK时再次转到loginscreen。如果未发生sqlexceptions,则可以调用ProgramPenceresi.java

我该怎么做?

1 个答案:

答案 0 :(得分:1)

将这些调用移到try / catch块中:

   private void Bağlan_ButonActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
        String user=Uname_Textfield.getText();
        String pwd= new String (Password_PasswordField.getPassword());
        try {  
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String connectionUrl = "jdbc:sqlserver://192.168.131.10;" + "databaseName=Digitalk;" + "user=" + user + ";" + "password=" + pwd + ";";      
            Connection con = DriverManager.getConnection(connectionUrl);
            new ProgramPenceresi().setVisible(true);
            dispose();
        } catch (SQLException e) {
                JOptionPane.showMessageDialog(this, "Kullanıcı Adı veya Şifre Yanlış!");   
        } catch (ClassNotFoundException cE) {
                System.out.println("Class Not Found Exception: "+ cE.toString());
        }
    }

我根本不喜欢这段代码。根本就没有分层。您不应该将UI和数据库代码混合在一起。您应该外部化数据库参数。你不应该以这种方式驱动逻辑。您至少需要尝试MVC分离。

你刚刚开启麻烦的那个连接对你来说没有任何好处。它是该方法的本地方法,因此当您退出该方法时,它将有资格进行垃圾回收。你没有用它在你发布的代码中进行任何SQL调用,所以除非你以后添加它们,否则它将被浪费。

使用它或丢失它。

不要从catch块向System.out打印简单消息。打印或记录整个堆栈跟踪。它为您提供了比您的信息更多的信息;你会发现从完整的堆栈跟踪调试更容易。