任何人都可以在这个java代码中解释try块的用途吗?

时间:2018-03-14 08:05:39

标签: java jdbc odbc

import java.io.*;
import java.sql.*;
public class jdbcdemo
{
    public static void main(String args[])throws IOException
    {
        Connection con=null;
        try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con=DriverManager.getConnection("jdbc:odbc:ebbill","","");
            System.out.println("ConnectionSuccesfull");
            Statement stat=con.createStatement();
            int result=stat.executeUpdate("Insert into tableone values(5,'siva',50,6000)");
            System.out.println("Record Inserted");
            stat.close();
            con.close();
        }
        catch(ClassNotFoundException e)
        {
            System.out.println("Exception:"+e.getMessage());
        }
        catch(SQLException e)
        {
            System.out.println("Exception:"+e.getMessage());
        }
    }
}

我不明白这个try块会发生什么。请用简单的术语简要解释一下。

此行Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");在最新的java中无效。它仅适用于java 6或以前的版本。

3 个答案:

答案 0 :(得分:2)

该行

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

尝试从应用程序的类路径加载类sun.jdbc.odbc.JdbcOdbcDriver。 如果未找到该类,则抛出异常ClassNotFoundException

从java 8开始,此类(sun.jdbc.odbc.JdbcOdbcDriver)已根据oracle documentation删除:

  

JDBC-ODBC Bridge的状态    JDBC-ODBC Bridge 应被视为过渡解决方案; 将在JDK 8中删除。此外,Oracle不支持JDBC-ODBC Bridge。 Oracle建议您使用数据库供应商提供的JDBC驱动程序,而不是JDBC-ODBC Bridge。

答案 1 :(得分:0)

try块的目的是处理容易出错的代码,即try块内的代码,往往会在运行时抛出异常。

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    con=DriverManager.getConnection("jdbc:odbc:ebbill","","");
    Statement stat=con.createStatement();

上面的代码可能会在某些内容不正确时导致错误并导致JVM终止(换句话说,应用程序会出现ERROR)。为了处理在运行时期间引起的异常,我们在try块中包含了容易出错的代码,并在catch块中添加了一个补救措施来处理异常情况。

您的代码尝试加载类" sun.jdbc.odbc.JdbcOdbcDriver " 。如果找不到该类,则抛出ClassNotFoundException异常。

答案 2 :(得分:0)

简单来说,在try块中,代码尝试建立与数据库的连接。然后,在断开与数据库的连接之前,它会尝试将记录插入该数据库中的表中。

将它放在try块中并且下面有catch块意味着如果代码中的任何内容出现问题,那么执行与发生的特定错误相关的相应catch块中的代码。

在您的情况下,您有两个catch块,ClassNotFoundException和SQLException。

通常,执行以下行时可能会发生ClassNotFoundException:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:ebbill","","");

一个常见原因可能是您的项目上没有安装JDBC驱动程序。

执行以下行时可能会抛出SQLException:

Statement stat=con.createStatement();
        int result=stat.executeUpdate("Insert into tableone values(5,'siva',50,6000)");

通常会发生这种情况,因为在尝试访问数据库或使用SQL查询时,数据库端出现了问题。

可能会抛出其他异常,但是这些异常会导致程序崩溃,错误日志记录更少,并且没有处理错误的逻辑。您可以捕获Exception(它会捕获任何抛出的异常)但是在现实世界中,这可以被认为是不好的做法,因为您应该知道可以抛出什么类型的异常并适当地处理它们。

在您的示例中,假设由于某种原因,我们知道在应用程序运行时,偶尔可能会在边缘情况下抛出SQL异常。我们还假设编写代码以防止这种情况发生在编程上是不可行的,因此我们只想记录错误,向用户提供消息并继续执行正常的执行流程以运行程序。

但是,如果抛出ClassNotFoundException,我们假设我们不想继续正常运行应用程序(我们无法继续)。因此,我们可能希望记录错误,并向用户输出一条消息,建议他们与系统管理员联系。

所以这里我们对两种不同类型的错误有两种不同的响应,因此需要两个catch块来捕获不同类型的错误。