Java 和 MySQL - 异常处理
异常处理允许您以受控方式处理异常情况,例如程序定义的错误。
当发生异常情况时,将引发异常。术语"引发"意味着当前程序执行停止,并且控制权将重定向到最近的 适用的 catch 子句。如果不存在适用的 catch 子句,则程序的执行结束。
JDBC 异常处理与 Java 异常处理非常相似,但对于 JDBC,您将处理的最常见异常是 java.sql.SQLException。
SQLException 方法
SQLException 可以同时发生在驱动程序和数据库中。发生此类异常时,将向 catch 子句传递 SQLException 类型的对象。
传递的 SQLException 对象具有以下方法可用于检索有关异常的其他信息 −
| 方法 | 描述 |
|---|---|
| getErrorCode( ) | 获取与异常相关的错误编号。 |
| getMessage( ) | 获取由驱动程序处理的错误的 JDBC 驱动程序错误消息,或获取数据库错误的 Oracle 错误编号和消息。 |
| getSQLState( ) | 获取 XOPEN SQLstate 字符串。对于 JDBC 驱动程序错误,此方法不会返回任何有用信息。对于数据库错误,将返回五位 XOPEN SQLstate 代码。此方法可以返回 null。 |
| getNextException( ) | 获取异常链中的下一个 Exception 对象。 |
| printStackTrace( ) | 打印当前异常或可抛出异常,并将其回溯打印到标准错误流。 |
| printStackTrace(PrintStream s) | 将此可抛出异常及其回溯打印到您指定的打印流。 |
| printStackTrace(PrintWriter w) | 将此可抛出异常及其回溯打印到您指定的打印编写器。 |
通过利用 Exception 中可用的信息对象,您可以捕获异常并适当地继续您的程序。以下是 try 块的一般形式 −
try {
// 您的危险代码位于这些花括号之间!!!
}
catch(Exception ex) {
// 您的异常处理代码位于这些
// 花括号之间
}
finally {
// 您的必须始终执行的代码位于这些
// 花括号之间。例如关闭数据库连接。
}
示例
研究以下示例代码,了解 try....catch...finally 块的用法。
此代码是根据上一章中的环境和数据库设置编写的。
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestApplication {
static final String DB_URL = "jdbc:mysql://localhost/TUTORIALSPOINT";
static final String USER = "guest";
static final String PASS = "guest123";
static final String QUERY = "{call getEmpName (?, ?)}";
public static void main(String[] args) {
// 打开连接
try(Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
CallableStatement stmt = conn.prepareCall(QUERY);
) {
// 将值绑定到参数中。
stmt.setInt(1, 1); // This would set ID
// 因为第二个参数是 OUT 所以注册它
stmt.registerOutParameter(2, java.sql.Types.VARCHAR);
//使用execute方法运行存储过程。
System.out.println("Executing stored procedure..." );
stmt.execute();
//使用 getXXX 方法检索员工姓名
String empName = stmt.getString(2);
System.out.println("Emp Name with ID: 1 is " + empName);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
现在让我们编译上面的例子如下 −
C:\>javac TestApplication.java C:\>
运行 TestApplication 时,如果没有问题,则会产生以下结果,否则将捕获相应的错误并显示错误消息 −
C:\>java TestApplication Executing stored procedure... Emp Name with ID: 1 is Zara C:\>

