2012-11-29 3 views
0

SQL Server 2008을 데이터베이스로 사용하고 있습니다. 그리고 JDBC을 사용하여 데이터베이스를 Under로 액세스하고 있습니다. SQL 서버의 Class.forName

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", "[email protected]"); 
    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"). 내 프로그램이 잘 돌아가고 있지만. 운전 기사를 등록하지 않고 어떻게 작동하는지 알려주십시오.

답변

1

현대 JDBC 드라이버에서는 Class.forName 호출이 더 이상 필요하지 않습니다. 이들이 올바르게 설치되면 jar 파일 서비스 매니페스트를 사용하여 스스로를 등록합니다.

하지만 코드가 작동하지 않는 것이 좋습니다.

2

JDBC 4.0 드라이버는 모든 구현을 /META-INF/services/java.sql.Driver에 나열하여 java.sql.Driver 구현을 선언해야하기 때문에. DriverManagerjava.util.ServiceLoader을 사용하여 자신을 선언하는 모든 드라이버를 자동으로로드하고 등록합니다.

이렇게하면 드라이버가 JDBC 4.0 호환 인 경우 Class.forName() (또는 시스템 등록 정보 jdbc.drivers)을 사용하여 드라이버를로드 할 필요가 없습니다.