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
或以前的版本。
答案 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块来捕获不同类型的错误。