Java没有给出错误!

时间:2009-08-21 09:06:32

标签: java mysql database jdbc odbc

这是我的代码 - 我只是检查我的MySQL数据库连接 但首先我已成功编译并运行该程序。但后来我评论了Class.forName。
仍然当我编译它成功运行,没有任何错误。为什么?

import java.sql.Connection;
import java.sql.DriverManager;


public class FirstJbdc {
    public static void main(String[] args) {
        Connection cn=null;
        try {
            //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            System.out.println("Driver loaded successfully");
            cn=DriverManager.getConnection("jdbc:odbc:myDSN","root", "java");
            System.out.println("Database connected successfully....");
            System.out.println(cn);
        } catch (Exception e) {
            // TODO: handle exception
                        e.printStackTrace();
        }
    }
}

5 个答案:

答案 0 :(得分:8)

我抛出一个错误,好吧。这就是

catch (Exception e){
     // here the exception is instantiated, but nothing is done about it
}

子句默默地吞下你的异常。

尝试

System.out.println( e.getMessage() );
中的

答案 1 :(得分:7)

即使不使用Class.forName,Java 1.6也可以找到JDBC驱动程序。

以下是documentation的相关部分:

  

DriverManager方法getConnectiongetDrivers已得到增强,可支持Java Standard Edition Service Provider机制。 JDBC 4.0驱动程序必须包含文件META-INF/services/java.sql.Driver。此文件包含java.sql.Driver的JDBC驱动程序实现的名称。例如,要加载my.sql.Driver类,META-INF/services/java.sql.Driver文件将包含条目:

my.sql.Driver
     

应用程序不再需要使用Class.forName()明确加载JDBC驱动程序。当前使用Class.forName()加载JDBC驱动程序的现有程序将继续工作而无需修改。

答案 2 :(得分:1)

注意:这仅适用于JDBC 4.0之前的驱动程序。

JDBC驱动程序应该有一个static部分,在加载类时会使用java.sql.DriverManager注册它们,因此需要Class.forName(String)

详情请见http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/drivermanager.html

答案 3 :(得分:0)

尝试{

     //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      System.out.println("Driver loaded successfully");
      cn=DriverManager.getConnection("jdbc:odbc:myDSN","root", "java");
      System.out.println("Database connected successfully....");
      System.out.println(cn);
} catch (Exception e) {
    // add the following statement
    System.out.println(e.getMessage());
}

如果在catch块中添加语句,然后编译并运行,您应该看到错误消息,如 -

[ Some Com ] [部分驱动程序管理器]未找到数据源名称且未指定默认驱动程序

答案 4 :(得分:0)

如果没有Class.forName(),则不会加载JDBC-ODBC桥驱动程序。根据JDBC规范,如果没有找到URL的驱动程序,getConnection()将返回null,不会抛出异常。所以这是预期的行为。