JDBC 异常处理(SQLException)
异常处理允许您以受控的方式处理异常情况,例如程序定义的错误。
发生异常情况时,将引发异常。抛出这个词意味着当前程序停止执行,并且控件被重定向到最接近的适用catch子句。如果不存在适用的catch子句,则程序的执行结束。
JDBC异常处理与Java异常处理非常相似,但是对于JDBC,您要处理的最常见的异常是 java.sql.SQLException.
SQLException方法
在驱动程序和数据库中都可能发生SQLException。发生此类异常时,会将SQLException类型的对象传递给catch子句。
传递的SQLException对象具有以下可用于检索有关异常的其他信息的方法-
方法 | 描述 |
---|---|
getErrorCode( ) | 获取与异常关联的错误号。 |
getMessage( ) | 获取错误的 JDBC 驱动程序错误消息,由驱动程序处理,或者获取数据库错误的 Oracle 错误号和消息。 |
getSQLState( ) | 获取 XOPEN SQLstate 字符串。对于 JDBC 驱动程序错误,此方法不返回任何有用信息。对于数据库错误,将返回五位数的 xopensqlstate 代码。此方法可以返回 null。 |
getNextException( ) | 获取异常链中的下一个 Exception 对象。 |
printStackTrace( ) | 打印当前异常或可调用异常,并将其回溯到标准错误流。 |
printStackTrace(PrintStream s) | 将此可丢弃对象及其回溯打印到指定的打印流。 |
printStackTrace(PrintWriter w) | 打印这个一次性文件,并将其回溯到指定的打印编写器。 |
通过利用Exception对象提供的信息,您可以捕获异常并适当地继续执行程序。这是try块的一般形式-
try{//您的异常代码介于这些大括号之间!!!}catch(Exceptionex){//您的异常处理代码介于这两者之间//花括号,类似于exception子句//在PL/SQL块中。}finally{//您必须始终执行的代码介于这两者之间//大括号。就像关闭数据库连接一样。}
在线示例
研究以下示例代码以了解try....catch...finally块的用法。
//步骤1.导入所需的软件包importjava.sql.*;publicclassJDBCExample{//JDBC驱动程序名称和数据库URLstaticfinalStringJDBC_DRIVER="com.mysql.jdbc.Driver";staticfinalStringDB_URL="jdbc:mysql://localhost/EMP";//数据库凭证staticfinalStringUSER="username";staticfinalStringPASS="password";publicstaticvoidmain(String[]args){Connectionconn=null;try{//步骤2:注册JDBC驱动程序Class.forName("com.mysql.jdbc.Driver");//步骤3:建立连接System.out.println("Connectingtodatabase...");conn=DriverManager.getConnection(DB_URL,USER,PASS);//步骤4:执行查询System.out.println("Creatingstatement...");Statementstmt=conn.createStatement();Stringsql;sql="SELECTid,first,last,ageFROMEmployees";ResultSetrs=stmt.executeQuery(sql);//步骤5:从结果集中提取数据while(rs.next()){//按列名检索intid=rs.getInt("id");intage=rs.getInt("age");Stringfirst=rs.getString("first");Stringlast=rs.getString("last");//显示值System.out.print("ID:"+id);System.out.print(",Age:"+age);System.out.print(",First:"+first);System.out.println(",Last:"+last);}//步骤6:清理环境rs.close();stmt.close();conn.close();}catch(SQLExceptionse){//处理JDBC错误se.printStackTrace();}catch(Exceptione){//处理Class.forName的错误e.printStackTrace();}finally{//最终阻止用于关闭资源try{if(conn!=null)conn.close();}catch(SQLExceptionse){se.printStackTrace();}}//结束trySystem.out.println("Goodbye!");}//结束main}//结束JDBCExample
现在,让我们编译上面的示例,如下所示:
C:\>javacJDBCExample.javaC:\>
运行时JDBCExample,如果没有问题,它将产生以下结果,否则将捕获相应的错误并显示错误消息-
C:\>javaJDBCExampleConnectingtodatabase...Creatingstatement...ID:100,Age:18,First:Zara,Last:AliID:101,Age:25,First:Mahnaz,Last:FatmaID:102,Age:30,First:Zaid,Last:KhanID:103,Age:28,First:Sumit,Last:MittalC:\>
通过传递错误的数据库名称或错误的用户名或密码来尝试上面的示例,然后检查结果。
编辑于2024-05-20 13:05