我在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
。
我该怎么做?
答案 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打印简单消息。打印或记录整个堆栈跟踪。它为您提供了比您的信息更多的信息;你会发现从完整的堆栈跟踪调试更容易。