我使用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”)。即使我的程序运行正常。如果没有注册驱动程序,请告诉我它是如何工作的。
答案 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文件服务清单)。
但最好有代码,以防万一无效。