SQL Server中的Class.forName

时间:2012-11-29 11:49:24

标签: sql-server jdbc

我使用SQL Server 2008作为数据库。使用 JDBC ,我正在以Under。

的形式访问数据库
public class DBConn {
public static void main(String[] args) throws ClassNotFoundException, SQLException{

    Connection con =null;
    //Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    con = DriverManager.getConnection("jdbc:sqlserver://BG4WS0552:1433;databaseName=DynamicsAx2009",
            "TESTUSER", "Sonata@123");
    Statement stmt = con.createStatement();
    String query = "SELECT * FROM custtable";
    DatabaseMetaData dmd = con.getMetaData();
    ResultSet rs = dmd.getColumns ("DynamicsAx2009", "%", "custtable", null) ;
    ResultSetMetaData rsmd = rs.getMetaData();
    int i = 1;
    while (rs.next()) {
        System.out.print(i++ + " COLUMN_NAME is " + rs.getString("COLUMN_NAME"));
        System.out.print(" TYPE:" + rs.getString("TYPE_NAME"));

        System.out.println("  DATA_TYPE is " + rs.getString("DATA_TYPE"));
    }
}}

参见上面的代码,我已经注释掉了Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”)。即使我的程序运行正常。如果没有注册驱动程序,请告诉我它是如何工作的。

2 个答案:

答案 0 :(得分:2)

由于JDBC 4.0驱动程序应通过列出java.sql.Driver中的所有实现来声明其/META-INF/services/java.sql.Driver的实现。 DriverManager将自动加载并注册使用java.util.ServiceLoader声明自己的所有驱动程序。

只要驱动程序符合JDBC 4.0,就不需要使用Class.forName()(或系统属性jdbc.drivers)来加载驱动程序。

答案 1 :(得分:1)

现在的JDBC驱动程序不再需要Class.forName调用。如果这些已正确安装,则会自行注册(使用jar文件服务清单)。

但最好有代码,以防万一无效。