1

我使用 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")。即使我的程序运行良好。请在不注册驱动程序的情况下告诉我它是如何工作的。

4

2 回答 2

3

由于 JDBC 4.0 驱动程序应该java.sql.Driver通过在/META-INF/services/java.sql.Driver. 将使用java.util.ServiceLoaderDriverManager自动加载和注册所有以这种方式声明自己的驱动程序。

这消除了使用Class.forName()(或系统属性jdbc.drivers)加载驱动程序的需要,只要驱动程序符合 JDBC 4.0。

于 2012-11-29T12:48:52.623 回答
1

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

但最好有代码,以防万一不起作用。

于 2012-11-29T12:01:27.763 回答